A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© syinys7 中级黑马   /  2016-6-14 22:47  /  908 人查看  /  13 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

今天讲到了String类, String类中那些有的没的的构造方法和成员方法了解的差不多.但是晚间做作业的时候,遇上了难题..不知道从哪下手

题目是这样的:3.分析以下需求,并用代码实现:
                (1)定义数字字符串数组{"010","3223","666","7890987","123123"}
                (2)判断该数字字符串数组中的数字字符串是否是对称(第一个数字和最后一个数字相等,第二个数字和倒数第二个数字是相等的,依次类推)的,并逐个输出
                (3)如:010 是对称的,3223 是对称的,123123 不是对称的
               
                提示:循环获取字符串的每一个字符,依次比较第一个和最后一个,第二个和倒数第二个。。。

还请各位同学耐心指教,谢过.

13 个回复

倒序浏览
在线等...停急的.
回复 使用道具 举报
  1. package com.heima.test;

  2. /**
  3. * 题目是这样的:3.分析以下需求,并用代码实现: (1)定义数字字符串数组{"010","3223","666","7890987","123123"}
  4. * (2)判断该数字字符串数组中的数字字符串是否是对称 (第一个数字和最后一个数字相等,第二个数字和倒数第二个数字是相等的,依次类推)的,并逐个输出
  5. * (3)如:010 是对称的,3223 是对称的,123123 不是对称的
  6. *
  7. * 提示:循环获取字符串的每一个字符,依次比较第一个和最后一个,第二个和倒数第二个。。。
  8. *
  9. * @author Venus
  10. *
  11. */
  12. public class Test9 {
  13.         public static void main(String[] args) {
  14.                 String[] strarr = { "010", "3223", "666", "7890987", "123123" };
  15.                 for (int i = 0; i < strarr.length; i++) {
  16.                         String temp = strarr[i];
  17.                         boolean b = method(temp);
  18.                         if(b)
  19.                                 System.out.println(temp+" 是对称的.");
  20.                         else{
  21.                                 System.out.println(temp+" 是不对称的.");
  22.                         }
  23.                 }
  24.         }

  25.         static boolean method(String temp) {
  26.                 int count =0;
  27.                 for (int i = 0; i < temp.length() / 2; i++) {
  28.                         if (temp.charAt(i) != temp.charAt(temp.length() - i - 1)) {
  29.                                 count++;
  30.                         }
  31.                 }
  32.                 if (count > 0)
  33.                         return false;
  34.                 return true;
  35.         }
  36. }
复制代码
我不加注释,看你能看懂么.方法不太好.

点评

赞!  发表于 2016-6-15 13:02
回复 使用道具 举报
默默的说一句,楼上的不加注释,点招的时候老师如果看不懂,就不给分哦!!!或者说给不了满分的......
回复 使用道具 举报
  1. public static void main(String[] args) {
  2.                 //获取每个字符串元素
  3.                 //对称校验并输出
  4.                 String[] str = {"010","3223","666","7890987","123123"};
  5.                 outer:for (int i = 0; i < str.length; i++) {
  6.                         char[] ch = str[i].toCharArray();                //字符串转字符数组

  7.                         for (int j = 0;j < ch.length / 2;++j) {
  8.                                 if (ch[j] != ch[ch.length -1 -j]) {
  9.                                         System.out.print(str[i] + "不是对称的");
  10.                                         if (i < str.length - 1)
  11.                                                 System.out.print(",");
  12.                                         continue outer;                                        //非对称输出后 跳过本次外层循环
  13.                                 }
  14.                         }
  15.                         System.out.print(str[i] + "是对称的");
  16.                         if (i < str.length - 1)
  17.                                 System.out.print(",");
  18.                 }
  19.         }
复制代码

点评

赞!  发表于 2016-6-15 13:04
回复 使用道具 举报
  1. package com.heima.test;

  2. public class Test3 {

  3.         /**
  4.          * 分析以下需求,并用代码实现:
  5.                 (1)定义数字字符串数组{"010","3223","666","7890987","123123"}
  6.                 (2)判断该数字字符串数组中的数字字符串是否是对称(第一个数字和最后一个数字相等,
  7.                         第二个数字和倒数第二个数字是相等的,依次类推)的,并逐个输出
  8.                 (3)如:010 是对称的,3223 是对称的,123123 不是对称的
  9.                
  10.                 提示:循环获取字符串的每一个字符,依次比较第一个和最后一个,第二个和倒数第二个。。。
  11.                 思路:
  12.                 1.定义一个标志flag,当flag为true时,表示一个数字字符串满足(2)中要求
  13.                 2.循环遍历数组中的元素for循环,元素满足条件时,即flag=true时,输出打印这个元素
  14.                 3.在for循环中内嵌一个for循环判断每个数字字符串是否满足(2)中要求,不满足要求,设置标记flag,为false,同时跳出内循环
  15.          */
  16.        
  17.         public static void main(String[] args) {
  18.                
  19.                 String[] arr = {"010", "3223", "666", "7890987", "123123"};
  20.                
  21.                 printArray(arr);
  22.                
  23.         }

  24.         public static void printArray(String[] arr) {
  25.                
  26.                 boolean flag = true;
  27.                 for (int i = 0; i < arr.length; i++) {
  28.                         for (int j = 0; j < arr[i].length()/2; j++) {
  29.                                
  30.                                 //获取字符数组中第(i+1)字符串中的第(j+1)个字符
  31.                                 char ch1 = arr[i].charAt(j);
  32.                                 //获取字符数组中第i个字符串中的倒数第(j+1)个字符
  33.                                 char ch2 = arr[i].charAt(arr[i].length()-1-j);
  34.                                 //判断这个两个字符是否相等
  35.                                 if (ch1 != ch2) {                //不相等,不满足要求
  36.                                         flag = false;                //不满足要求设置标记flag为false
  37.                                         break;                                //跳出循环,停止判断第i个字符串,判断下一个字符串
  38.                                 }
  39.                         }
  40.                         if (flag) {
  41.                                 System.out.println(arr[i] + " 是对称的");
  42.                         } else {
  43.                                 System.out.println(arr[i] + " 是不对称的");
  44.                         }
  45.                 }
  46.         }

  47. }
复制代码
回复 使用道具 举报
  1. package com.heima.test;

  2. public class Test3_Sb {

  3.         /**
  4.          * 分析以下需求,并用代码实现:
  5.                 (1)定义数字字符串数组{"010","3223","666","7890987","123123"}
  6.                 (2)判断该数字字符串数组中的数字字符串是否是对称(第一个数字和最后一个数字相等,
  7.                         第二个数字和倒数第二个数字是相等的,依次类推)的,并逐个输出
  8.                 (3)如:010 是对称的,3223 是对称的,123123 不是对称的
  9.                
  10.                 提示:循环获取字符串的每一个字符,依次比较第一个和最后一个,第二个和倒数第二个。。。
  11.                 思路:
  12.                 1.将字符串反转,如果反转后与字符串相同,则表示这个字符串是对称的
  13.                         反转:        StringBuffer sb;        sb.reverse()方法
  14.                         转换成字符串:        String str = sb.reverse().toString();
  15.                         判断是否与原字符串相等:        str.equals(arr[i]);
  16.                 2.使用for循环遍历数组中的元素,进行步骤一中的判断,满足输出这个数组元素是对称的,不满足输出这个元素是不对称的
  17.          */
  18.        
  19.         public static void main(String[] args) {
  20.                
  21.                 String[] arr = {"010", "3223", "666", "7890987", "123123"};
  22.                
  23.                 for (int i = 0; i < arr.length; i++) {
  24.                         StringBuffer sb = new StringBuffer(arr[i]);
  25.                         String str = sb.reverse().toString();
  26.                         if (str.equals(arr[i])) {
  27.                                 System.out.println(arr[i] + " 是对称的!");
  28.                         } else {
  29.                                 System.out.println(arr[i] + " 是不对称的!");
  30.                         }
  31.                 }
  32.                
  33.         }

  34. }
复制代码


点评

赞!  发表于 2016-6-15 13:08
回复 使用道具 举报 2 0
目前所想出来的两种不同方法
回复 使用道具 举报
要么将字符串转成字符数组,前后遍历比较,要么用字符容器里面的反转方法,直接比较字符
回复 使用道具 举报
  1. public class Test57 {
  2.         public static void main(String[] args) {
  3.                 String [] arr = {"010","3223","666","7890987","123123"};
  4.                 for (int i = 0; i < arr.length; i++) {
  5.                         if(new StringBuffer(arr[i]).reverse().toString().equals(arr[i]))
  6.                                 System.out.println(arr[i]+"是对称的");
  7.                         else System.out.println(arr[i]+"是不对称的");
  8.                 }
  9.         }
  10. }
复制代码
回复 使用道具 举报

大哥你这个方法很讨巧..   
思路是先反转,然后比较反转先后是否相等,相等就是对称的..赞!!

但是当时我们还没有学到StringBuffer的内容.后来我想出来了
把字符串数组遍历,每一个元素转换成一个数组"010"变成了{010}
之后按照数组的方法完成的比较,现在看来还是你这个方法快啊哈哈哈哈
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马