黑马程序员技术交流社区
标题:
帮忙分析一道题
[打印本页]
作者:
syinys7
时间:
2016-6-14 22:47
标题:
帮忙分析一道题
今天讲到了String类, String类中那些有的没的的构造方法和成员方法了解的差不多.但是晚间做作业的时候,遇上了难题..不知道从哪下手
题目是这样的:3.分析以下需求,并用代码实现:
(1)定义数字字符串数组{"010","3223","666","7890987","123123"}
(2)判断该数字字符串数组中的数字字符串是否是对称(第一个数字和最后一个数字相等,第二个数字和倒数第二个数字是相等的,依次类推)的,并逐个输出
(3)如:010 是对称的,3223 是对称的,123123 不是对称的
提示:循环获取字符串的每一个字符,依次比较第一个和最后一个,第二个和倒数第二个。。。
还请各位同学耐心指教,谢过.
作者:
syinys7
时间:
2016-6-14 22:49
在线等...停急的.
作者:
18611643318
时间:
2016-6-14 23:28
package com.heima.test;
/**
* 题目是这样的:3.分析以下需求,并用代码实现: (1)定义数字字符串数组{"010","3223","666","7890987","123123"}
* (2)判断该数字字符串数组中的数字字符串是否是对称 (第一个数字和最后一个数字相等,第二个数字和倒数第二个数字是相等的,依次类推)的,并逐个输出
* (3)如:010 是对称的,3223 是对称的,123123 不是对称的
*
* 提示:循环获取字符串的每一个字符,依次比较第一个和最后一个,第二个和倒数第二个。。。
*
* @author Venus
*
*/
public class Test9 {
public static void main(String[] args) {
String[] strarr = { "010", "3223", "666", "7890987", "123123" };
for (int i = 0; i < strarr.length; i++) {
String temp = strarr[i];
boolean b = method(temp);
if(b)
System.out.println(temp+" 是对称的.");
else{
System.out.println(temp+" 是不对称的.");
}
}
}
static boolean method(String temp) {
int count =0;
for (int i = 0; i < temp.length() / 2; i++) {
if (temp.charAt(i) != temp.charAt(temp.length() - i - 1)) {
count++;
}
}
if (count > 0)
return false;
return true;
}
}
复制代码
我不加注释,看你能看懂么.方法不太好.
作者:
善良的死神达乐
时间:
2016-6-14 23:32
默默的说一句,楼上的不加注释,点招的时候老师如果看不懂,就不给分哦!!!或者说给不了满分的......
作者:
drandy
时间:
2016-6-15 00:32
public static void main(String[] args) {
//获取每个字符串元素
//对称校验并输出
String[] str = {"010","3223","666","7890987","123123"};
outer:for (int i = 0; i < str.length; i++) {
char[] ch = str[i].toCharArray(); //字符串转字符数组
for (int j = 0;j < ch.length / 2;++j) {
if (ch[j] != ch[ch.length -1 -j]) {
System.out.print(str[i] + "不是对称的");
if (i < str.length - 1)
System.out.print(",");
continue outer; //非对称输出后 跳过本次外层循环
}
}
System.out.print(str[i] + "是对称的");
if (i < str.length - 1)
System.out.print(",");
}
}
复制代码
作者:
我是你岁哥❤环
时间:
2016-6-15 07:38
package com.heima.test;
public class Test3 {
/**
* 分析以下需求,并用代码实现:
(1)定义数字字符串数组{"010","3223","666","7890987","123123"}
(2)判断该数字字符串数组中的数字字符串是否是对称(第一个数字和最后一个数字相等,
第二个数字和倒数第二个数字是相等的,依次类推)的,并逐个输出
(3)如:010 是对称的,3223 是对称的,123123 不是对称的
提示:循环获取字符串的每一个字符,依次比较第一个和最后一个,第二个和倒数第二个。。。
思路:
1.定义一个标志flag,当flag为true时,表示一个数字字符串满足(2)中要求
2.循环遍历数组中的元素for循环,元素满足条件时,即flag=true时,输出打印这个元素
3.在for循环中内嵌一个for循环判断每个数字字符串是否满足(2)中要求,不满足要求,设置标记flag,为false,同时跳出内循环
*/
public static void main(String[] args) {
String[] arr = {"010", "3223", "666", "7890987", "123123"};
printArray(arr);
}
public static void printArray(String[] arr) {
boolean flag = true;
for (int i = 0; i < arr.length; i++) {
for (int j = 0; j < arr[i].length()/2; j++) {
//获取字符数组中第(i+1)字符串中的第(j+1)个字符
char ch1 = arr[i].charAt(j);
//获取字符数组中第i个字符串中的倒数第(j+1)个字符
char ch2 = arr[i].charAt(arr[i].length()-1-j);
//判断这个两个字符是否相等
if (ch1 != ch2) { //不相等,不满足要求
flag = false; //不满足要求设置标记flag为false
break; //跳出循环,停止判断第i个字符串,判断下一个字符串
}
}
if (flag) {
System.out.println(arr[i] + " 是对称的");
} else {
System.out.println(arr[i] + " 是不对称的");
}
}
}
}
复制代码
作者:
我是你岁哥❤环
时间:
2016-6-15 07:40
package com.heima.test;
public class Test3_Sb {
/**
* 分析以下需求,并用代码实现:
(1)定义数字字符串数组{"010","3223","666","7890987","123123"}
(2)判断该数字字符串数组中的数字字符串是否是对称(第一个数字和最后一个数字相等,
第二个数字和倒数第二个数字是相等的,依次类推)的,并逐个输出
(3)如:010 是对称的,3223 是对称的,123123 不是对称的
提示:循环获取字符串的每一个字符,依次比较第一个和最后一个,第二个和倒数第二个。。。
思路:
1.将字符串反转,如果反转后与字符串相同,则表示这个字符串是对称的
反转: StringBuffer sb; sb.reverse()方法
转换成字符串: String str = sb.reverse().toString();
判断是否与原字符串相等: str.equals(arr[i]);
2.使用for循环遍历数组中的元素,进行步骤一中的判断,满足输出这个数组元素是对称的,不满足输出这个元素是不对称的
*/
public static void main(String[] args) {
String[] arr = {"010", "3223", "666", "7890987", "123123"};
for (int i = 0; i < arr.length; i++) {
StringBuffer sb = new StringBuffer(arr[i]);
String str = sb.reverse().toString();
if (str.equals(arr[i])) {
System.out.println(arr[i] + " 是对称的!");
} else {
System.out.println(arr[i] + " 是不对称的!");
}
}
}
}
复制代码
作者:
我是你岁哥❤环
时间:
2016-6-15 07:41
目前所想出来的两种不同方法
作者:
安静的喝会奶
时间:
2016-6-15 09:08
要么将字符串转成字符数组,前后遍历比较,要么用字符容器里面的反转方法,直接比较字符
作者:
18611643318
时间:
2016-6-15 20:55
public class Test57 {
public static void main(String[] args) {
String [] arr = {"010","3223","666","7890987","123123"};
for (int i = 0; i < arr.length; i++) {
if(new StringBuffer(arr[i]).reverse().toString().equals(arr[i]))
System.out.println(arr[i]+"是对称的");
else System.out.println(arr[i]+"是不对称的");
}
}
}
复制代码
作者:
syinys7
时间:
2016-6-24 17:32
我是你岁哥❤环 发表于 2016-6-15 07:40
大哥你这个方法很讨巧..
思路是先反转,然后比较反转先后是否相等,相等就是对称的..赞!!
但是当时我们还没有学到StringBuffer的内容.后来我想出来了
把字符串数组遍历,每一个元素转换成一个数组"010"变成了{010}
之后按照数组的方法完成的比较,现在看来还是你这个方法快啊哈哈哈哈
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2