public class palindrome {
public static void main(String args[]) {
String name="caac";
char com[]=name.toCharArray();
char[] con=new char[4];
for(int i=0,j=3;i<com.length;i++,j--)
{
com[j]=con[i];
System.out.println(i+" "+j+"value of i "+con[i]);
}
}
}
我想将char com反复复制到char c,我得到了空白输出,这个程序有什么问题。我应该做什么修正。这个问题正文不符合我们的质量,我不想看到stackoverflow。< / p>
答案 0 :(得分:2)
看起来com,con和i和j混在了一起。我强烈建议避免使用i和j,即使教科书也这样做。使用i和k代替,或者更好的代表变量目的的东西,也是com和con容易混淆的相似。
如果改为:
con[j] = com[i];
System.out.println(i + " " + j + " value of i " + com[i] + " " + con[j]);
显示此输出,这是您所期望的吗?
0 3 value of i c c
1 2 value of i a a
2 1 value of i a a
3 0 value of i c c
使用更长的描述性变量不会造成任何伤害或性能损失,这使问题变得更加明显。 e.g。
char original[] = name.toCharArray();
char[] reversed = new char[4];
for (int forwards = 0, backwards = 3; forwards < original.length; forwards++, backwards--) {
reversed[backwards] = original[forwards];
System.out.println(
forwards + " " + backwards + " value of i " + original[forwards] + " " + reversed[backwards]);
}
答案 1 :(得分:2)
我认为你可以比你想要的更小。如果你想要反转从字符串创建的char [],你可以先反转字符串然后你可以创建数组。
String name="caac";
String reverse= new StringBuffer(name).reverse().toString();
char com[]=name.toCharArray();//which contains reversed array
答案 2 :(得分:1)
对线上现有代码的小修正
con[j] = com[i];
和
System.out.println(i + " " + j + "value of i " + com[i] +" "+con[j]);
效果很好。
public static void main(String args[]) {
String name = "daac";
char com[] = name.toCharArray();
char[] con = new char[4];
for (int i = 0, j = 3; i < com.length; i++, j--) {
con[j] = com[i];
System.out.println(i + " " + j + "value of i " + com[i] +" "+con[j]);
}
}
其他解决方案是使用StringBuffer.reverse
作为字符串
StringBuffer sb = new StringBuffer(name);
char reverse[] = sb.reverse().toString().toCharArray();
答案 3 :(得分:0)
另一种反转char数组的方法:
public char[] reverseArray(char[] source) {
char[] reversed = new char[source.length];
IntStream.range(0, source.length).forEach(i -> reversed[source.length - 1 -i] = source[i]);
return reversed;
}
答案 4 :(得分:-1)
Simon Asir。 我建议你写一个函数,下面给出一个例子演示它,我不明白你在解决什么问题(任务):
public static void main(String[] args){
String name="something eatable";
char com[]=name.toCharArray();
char[] reversed = reverseArray(com);
for (char c:reversed)
System.out.print(c+" ");
System.out.println(isPalindrome(new char[]{'b','a'}));
System.out.println(isPalindrome(new char[]{'a','b','a'}));
}
public static char[] reverseArray(char[] arr){
char[] reversed = new char[arr.length];
for (int i=0, j=arr.length-1; i < arr.length; i++, j--){
reversed[i]=arr[j];
}
return reversed;
}
public static boolean isPalindrome(char[] arr){
for (int head=0, tail=arr.length-1; head<=tail; head++, tail--){
if (arr[head]!=arr[tail])
return false;
}
return true;
}