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

时间:2014-04-18 02:41:37

标签: java arrays duplicates user-input

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

首先,我想指出我在这里检查了有关重复的问题,但是他们要么通过导入除扫描程序之外的程序包来回答,要么检查已经存在的int或字符串存储数组中的重复项。这是不同的:

        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.");
            }

...代码没有结束。使用int的for循环仍需要在循环回到开头之前经过用户的几个输入并通过i ++接收下一个猪名。代码的其余部分我没有问题,只是每当我运行此代码时,仍然允许重复...任何提示都很感激。谢谢。

2 个答案:

答案 0 :(得分:1)

你的代码犯了两个错误。

  1. 您在初始for循环中重新定义了tempArray。
  2. 当你倒计时时,你正在计算你的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
    

答案 1 :(得分:0)

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现在是一个numberOfPigs的数组,其中每个元素都是null

   tempArray[i]=name;

现在tempArray中的第一个元素是用户输入名称,但所有其他元素仍为null

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

为什么您使用的是pigArray.length,但您根本没有在循环中使用pigArray

      while (tempArray[i].equals( tempArray[k])){

事实上,您正在比较数组中的第一个元素(不是null(它是用户输入))与所有其他元素( < / em> null!当然,它不会认为任何是重复的,因为你正在针对一大堆 nothing 检查它。

由于用户输入的名称永远不会等于null,因此将其错误地解释为&#34;不是重复的&#34;,并允许通过。

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