检查用户输入的数字重复

时间:2013-10-06 15:19:35

标签: java arrays

我正在做一个用户输入五个数字的程序,最后打印出的数字正常工作。我无法工作的是一个布尔函数来检查重复项。它应该在用户写入时检查重复项,例如,如果第一个数字是5而第二个数字也是5,那么在写入不同的数字之前,您应该会收到错误。意思是如果用户输入副本,则不应将其保存在数组中。这显然是一项任务,所以我只想要一两个提示。

这个程序是基于给我的伪代码编写的,因此我必须使用布尔值来检查public boolean duplicate( int number )类的重复项。

我试过自己试着自己尝试了一些东西,但显然我犯了一个愚蠢的错误。 E.g:

if(int i != myNumbers[i]) 
   checkDuplicates = false
     else
       checkDuplicates = true;

return checkDuplicates;

DuplicatesTest类:

public class DuplicatesTest {

    public final static int AMOUNT = 5;

    public static void main(String[] args) {

        Duplicates d = new Duplicates(AMOUNT);
        d.inputNumber();
        d.duplicate(AMOUNT);
        d.printInputNumbers();
    }
}

重复课程:

public class Duplicates {

  private int amount;    
  private int[] myNumbers; 
  private boolean checkDuplicates;

  public Duplicates(int a) {

    amount = a;
    myNumbers = new int[amount];   
}

  public void inputNumber() {

    for(int i = 0; i < amount; i++ ) {
      int input = Integer.parseInt(JOptionPane.showInputDialog("Input 5 numbers"));
      myNumbers[i] = input;
    }   
}

  public boolean duplicate( int number ) {

    <BOOLEAN TO CHECK FOR DUPLICATES, RETURN FALSE OR TRUE>

  }

  public void printInputNumbers() {

    JTextArea output = new JTextArea();
    output.setText("Your numbers are:" + "\n");

    for(int i = 0; i < myNumbers.length; i++) {
      if (i % 5 == 0) {
        output.append("\n");
      }
      output.append(myNumbers[i] + "\t");
    }
    JOptionPane.showMessageDialog(null, output, "Numbers", JOptionPane.PLAIN_MESSAGE);   
  } 
}

很抱歉,如果代码标签很乱,我之间的白色字段就会出现问题。我是新来的。

2 个答案:

答案 0 :(得分:1)

请勿将数字存储在数组中。请改用Set<Integer>。然后执行Set#contains()操作。这是O(1)操作,实际上远比迭代数组搜索重复项好得多。

好吧,如果强迫使用数组,那么你应该修改当前的方法,一旦找到副本就返回true,而不是再次迭代数组。在您当前的方法中,由于您在boolean块中将false变量设置为else,如果数组的最后一个元素不是,则您的方法将返回false和你正在检查的一样。所以,只需将您的方法修改为:

// loop over the array
    if (number == myNumbers[i])   
        return true;
// outside the loop, if you reach, return false
return false;

请注意,您当前的if语句将无法编译。你在那里声明了一个int变量,你不能这样做。

if (int i == myNumbers[i])   // this is not a valid Java code.

答案 1 :(得分:0)

int nums[] = new int[5];
int count = 0;

public boolean duplicate(int number) 
{
    boolean isDup = false;

    for (int i = 0; i <= count; i++)
    {
        if (number == nums[i])
        {
            isDup = true;
            break;
        }
    }

    if (!isDup) 
    {
        count++;
        nums[count] = number;
    } 
    return isDup;
}