有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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,结果是空的,这个程序怎么了。我该怎么改正呢。这个问题的主体不符合我们的质量,我不想看到这一行


共 (5) 个答案

  1. # 1 楼答案

    西蒙·阿西尔。 我建议你写一个函数,下面给出了一个例子来演示它,我不明白你在解决什么问题(任务):

    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;
    }
    
  2. # 2 楼答案

    我想你可以把你的衣服做得比你想要的小得多。如果要反转从字符串创建的char[],可以先反转字符串,然后创建数组

    String name="caac";
    String reverse= new StringBuffer(name).reverse().toString();
      char com[]=name.toCharArray();//which contains reversed array
    
  3. # 3 楼答案

    还有一种方法可以反转字符数组:

    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. # 4 楼答案

    对线路上现有代码的小修改

     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();
    
  5. # 5 楼答案

    看起来com、con、i和j混在一起了。我强烈建议不要让我和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]);
    
    }