3

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

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

我试着绕开它并自己尝试了一些东西,但显然我犯了一个愚蠢的错误。例如:

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

return checkDuplicates;

重复测试类:

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

抱歉,如果代码标签很乱,我在中间的白色字段等方面遇到了一些麻烦。我是新来的。

4

2 回答 2

1

不要将数字存储在数组中。改用 a 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.
于 2013-10-06T15:21:36.893 回答
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;
}    
于 2013-10-06T15:36:38.680 回答