将char复制到char数组反向

时间:2017-03-25 05:18:57

标签: java

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>

5 个答案:

答案 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;
}