当我在 java 中传递一个字符数组时,传递的数组是 different.For 例如,如果我传递一个数组 aqdf,则传递的数组实际上是 aqqq

When I pass a character array in java then the array passed is different.For example if I pass an array aqdf the passed array is actually aqqq

我正在尝试实现一种算法来确定字符串是否具有所有唯一字符而不使用任何其他数据结构。 这是我的代码:

package CTCI;

import java.util.Scanner;

public class ArrStrng1 {

    public static void main(String[] args) {
        Scanner s=new Scanner(System.in);
        System.out.println("Enter the number of characters in the string?");
        int l=s.nextInt();
        char[] ca=new char[l];
        System.out.println("Enter the characters in the string?");
        for(int i=0;i<l;i++)
        {
            char c=s.next().charAt(0);  
            ca[i]=c;

        }

        if(unique(ca,l))
            System.out.println("YES");
        else
            System.out.println("NO");
      s.close();    

    }

    public static boolean unique(char[] str,int l)
    {
        //using insertion sort to sort the character array
        char c;
        for(int i=1;i<l;i++)
        {
             c=str[i];
             int j=i;
             while(j>0 && c<str[j-1])
             {
                 str[j]=str[j-1];
                 j--;

             }


        }
        //Now checking if any two consecutive characters are same
        for(int j=0;j<l-1;j++)
        {
            if(str[j]==str[j+1])
                return false;
        }
        return true;//If no two consecutive characters are same then the character array is unique
    }

}

此解决方案无效,因为传递给函数 unique 的字符数组被修改,例如abcd 变成 abbb。 我错过了什么吗?我的代码中有什么错误? 任何帮助都是appreciated.Thank你。

您的插入排序有问题,您忘记将 c 的值插入到较小的索引 (j-1) 中。因此正确的排序是:

    char c;  
    for(int i=1;i<l;i++)
    {
         c=str[i];
         int j=i;
         while(j>0 && c<str[j-1])
         {                 
             str[j]=str[j-1];
             str[j-1]=c;
             --j;
         }
    }  

好好休息

我假设您希望自己实现插入排序。 因为 java 具有可用于数组的排序。 无论如何,问题出在插入排序实现中,您忘记了在数字之间切换,而只是分配了更大的字符试试这个:

 char c;
        char tmp;
        for(int i=1;i<l;i++)
        {
             c=str[i];
             int j=i;
             while(j>0 && c<str[j-1])
             {
                 tmp = str[j];
                 str[j]=str[j-1];
                 str[j-1] = tmp;
                 j--;

             }


        }
//      Arrays.sort(str);
        //Now checking if any two consecutive characters are same

另外,我建议为您的变量指定有意义的名称(即使在这些教程中也是如此),这在将来确实很有帮助。

希望对您有所帮助。