Java 为什么我的代码总是允许重复的名称?

Java 为什么我的代码总是允许重复的名称?,java,arrays,duplicates,user-input,Java,Arrays,Duplicates,User Input,我有一个关于编写代码的问题,该代码可以检查用户输入的内容(字符串)是否与数组已存储的字符串重复: 首先,我想指出,我在这里检查了关于重复的问题,但它们要么是通过导入扫描器以外的包来回答的,要么是检查已存储在int或string数组中的重复项。这是不同的: int numberOfPigs = Integer.parseInt( keyboard.nextLine() ); Pigs pigArray = new pigs[numberOfPigs];

我有一个关于编写代码的问题,该代码可以检查用户输入的内容(字符串)是否与数组已存储的字符串重复:

首先,我想指出,我在这里检查了关于重复的问题,但它们要么是通过导入扫描器以外的包来回答的,要么是检查已存储在int或string数组中的重复项。这是不同的:

        int numberOfPigs = Integer.parseInt( keyboard.nextLine() );
        Pigs pigArray = new pigs[numberOfPigs];

        for (int i = 0; i < pigArray.length; i++){

            System.out.println("Pig name: " + (i+1));
            String name = keyboard.nextLine();
            String [] tempArray = new String [numberOfPigs];

            tempArray[i]=name;

            for (int k = i+1; k < pigArray.length; k++){

            while (tempArray[i].equals( tempArray[k])){
                    System.out.println("The ID is duplicate.");
                    tempArrays[i] = keyboard.nextLine();
                }
                System.out.println("Not a duplicate! Yay.");
            }
intnumberofpigs=Integer.parseInt(keyboard.nextLine());
清管器PIGRARY=新清管器[清管器数量];
对于(int i=0;i
…代码还没有结束。带有int的for循环在循环到开始之前,我仍然需要通过用户的几个输入,并通过i++输入下一个猪名。代码的其余部分我没有问题,只是每当我运行此代码时,重复的代码仍然允许…任何提示都非常感谢。谢谢

int numberOfPigs = Integer.parseInt( keyboard.nextLine() );
Pigs pigArray = new pigs[numberOfPigs];

for (int i = 0; i < pigArray.length; i++){

   System.out.println("Pig name: " + (i+1));
   String name = keyboard.nextLine();


   String [] tempArray = new String [numberOfPigs];
现在
tempArray
中的第一个元素是用户输入的名称,但所有其他元素仍然是
null

   tempArray[i]=name;
   for (int k = i+1; k < pigArray.length; k++){
事实上,您正在将数组中的第一个元素(不是
null
(它是用户输入)与所有其他元素(是
null
)进行比较!当然,它不会认为任何东西是重复的,因为您是在对照一大堆空白内容检查它

由于用户输入的名称永远不等于
null
,因此被错误地解释为“不重复”,并允许通过

         System.out.println("The ID is duplicate.");
         tempArrays[i] = keyboard.nextLine();
      }
   System.out.println("Not a duplicate! Yay.");
}

您在代码中犯了两个错误

  • 您在最初的for循环中重新声明了tempArray
  • 你本应该倒计时的时候,却在k循环中倒计时

    int numberOfPigs = Integer.parseInt(keyboard.nextLine());
    Pigs pigArray = new pigs[numberOfPigs];
    String[] tempArray = new String[numberOfPigs]; // I moved this here see
                                                        // comment below
    for (int i = 0; i < pigArray.length; i++) {
    System.out.println("Pig name: " + (i + 1));
    String name = keyboard.nextLine();
    // first problem was you were redeclaring your tempArray here
    // thereby erasing previous elements over every iteration of i
    tempArray[i] = name;
    for (int k = i - 1; k >= 0; k--) { // you need to count backwards
                            //you only check what was already entered for duplicates
                             // you were doing the opposite
    while (tempArray[i].equals(tempArray[k])) {
        System.out.println("The ID is duplicate.");
        tempArray[i] = keyboard.nextLine();
    }
    System.out.println(" Not a duplicate! Yay.");
    }// k loop
    }// i loop
    
    intnumberofpigs=Integer.parseInt(keyboard.nextLine());
    清管器PIGRARY=新清管器[清管器数量];
    String[]tempArray=newstring[numberOfPigs];//我把这个移到了这里,看到了吗
    //评论如下
    对于(int i=0;i=0;k--){//您需要向后计数
    //您只需检查已输入的重复项
    //你做的正好相反
    while(tempArray[i].equals(tempArray[k])){
    System.out.println(“ID是重复的。”);
    tempArray[i]=keyboard.nextLine();
    }
    System.out.println(“不是重复的!耶。”);
    }//k环
    }//我循环
    

  • 谢谢你编辑我的帖子并回答这个问题。我会看看我能做些什么。如果你还在这里,我想问一个问题:我把第二个for循环改为:for(int k=0;int k=0时,你知道它将达到0,然后当它到达底部时,它将减到-1,并通过下一次检查失败,这样我们可以反转到0(数组的第一个元素),下次遇到麻烦时,我会记住这一点:p
    int numberOfPigs = Integer.parseInt(keyboard.nextLine());
    Pigs pigArray = new pigs[numberOfPigs];
    String[] tempArray = new String[numberOfPigs]; // I moved this here see
                                                        // comment below
    for (int i = 0; i < pigArray.length; i++) {
    System.out.println("Pig name: " + (i + 1));
    String name = keyboard.nextLine();
    // first problem was you were redeclaring your tempArray here
    // thereby erasing previous elements over every iteration of i
    tempArray[i] = name;
    for (int k = i - 1; k >= 0; k--) { // you need to count backwards
                            //you only check what was already entered for duplicates
                             // you were doing the opposite
    while (tempArray[i].equals(tempArray[k])) {
        System.out.println("The ID is duplicate.");
        tempArray[i] = keyboard.nextLine();
    }
    System.out.println(" Not a duplicate! Yay.");
    }// k loop
    }// i loop