在数组中查找重复值

时间:2014-07-09 02:05:48

标签: java arrays duplicates storing-data

我正在开展这个项目,希望我编写一个输入20个数字的程序,每个数字介于10和100之间。读取每个数字时,只有在它不是已读取的数字的副本时才显示它。我唯一困惑的部分是如何检查用户可能输入的重复值。如果用户确实输入了重复值,则不应再次存储它。

此外,输入的值应在沿用户先前输入的值输入后打印出来,例如: 23 23 45 23 45 67 23 45 67 12 等等。

我仍然是java编程的新手,所以任何帮助都会很棒。

import java.util.*;

public class NumberArray 
{
    public static void main(String[] args) 
    {
        // declare an array with 20 elements

        Scanner input = new Scanner( System.in );

            int num[] = new int[20];
            int index = 0;
            int enteredNumbers = 0;

            while( enteredNumbers < num.length )
            {
                System.out.print( "\nEnter number: ");
                int numberInput = input.nextInt();

                if (numberInput >= 10 && numberInput <= 100)
                {
                    num[index] = numberInput;
                    System.out.println("Number stored.");
                }

                //Check if numbers repeat--if not add to array
                else if(num[index] == numberInput)
                {
                    System.out.println("Duplicate value entered!\n");
                }

                else
                {
                    System.out.println("Invalid Number, enter within range.\n");
                }

                // increment number of entered numbers
                System.out.print(num[index] + "  ");
                System.out.println();
                enteredNumbers++;
                index++;
            }
      }
}

3 个答案:

答案 0 :(得分:2)

如果您要查找输入数字的重复项,一个建议是将索引从1到100的布尔数组都设置为false。从用户读取数字后,使用输入的数字作为数组的索引,如果该位置先前为false,则将该位置标记为true。如果您之前发现该位置是真的,那么您发现了一个副本,您可以进行打印。

答案 1 :(得分:1)

我们会坚持只使用数组,因为您是一名较新的程序员,并且可能不熟悉您可用的无数集合。

首先,您需要一种方法来检查重复项的整个输入值数组。

//if the array contains the number just input, return true.
//else return false.
public static boolean checkForDuplicates(int[] array, int enteredValue){
   for(int i=0;i<array.length;i++){
       if(array[i] == enteredValue)
           return true;
   }
   return false;
}

每次输入数字时,您都要检查它是否在您正在执行的适当范围(10到100),然后调用此方法以查看您的数组是否有重复项。

如果输入的号码已经存在,您将打印出所有存储的号码。让我们为此创建另一种方法来保持清洁。

public static void printArray(int[] ary, int enteredValues){
    for(int i=0;i<enteredValues;i++){
        System.out.print(ary[i]+" ");
    }
    System.out.println();
}

答案 2 :(得分:0)

使用集合,在获取输入后使用set.add()将其添加到集合中。它将根据它是否已存在返回一个布尔值。检查结果并显示相应的消息。做一些作业人......:)