3

ユーザーが5つの数字を入力し、最終的に数字が印刷されるプログラムを実行していますが、これは正常に機能しています。私がうまくいかないのは、重複をチェックするブール関数です。ユーザーが書き込んだときに重複をチェックする必要があるため、たとえば、1 番目の番号が 5 で 2 番目の番号も 5 の場合、別の番号を書き込むまでエラーが発生するはずです。つまり、ユーザーが重複を入力した場合、それは配列に保存されるべきではありません。これは明らかに課題なので、1 つまたは 2 つのヒントを求めているだけです。

このプログラムは、与えられた疑似コードに基づいて作成されているため、ブール値を使用してpublic boolean duplicate( int number )クラスとの重複をチェックする必要があります。

私はそれについて頭を悩ませ、自分で何かを試してみましたが、明らかに愚かな間違いをしています. 例えば:

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

コードタグが乱雑で申し訳ありません。間に白いフィールドがあるなどの問題がありました。私はここに新しいです。

4

2 に答える 2

1

数値を配列に格納しないでください。Set<Integer>代わりにaを使用してください。そして、Set#contains()操作を行います。これO(1)は、配列を反復処理して重複を検索するよりも実際にははるかに優れた操作です。

true配列を使用することが強制されている場合は、配列を再度反復するのではなく、重複を見つけたらすぐに戻るように現在のアプローチを変更する必要があります。現在のアプローチでは、boolean変数をブロックに設定しているため、配列の最後の要素がチェックしているものと同じでない場合、メソッドは戻りfalseます。したがって、アプローチを次のように変更するだけです。elsefalse

// 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 に答える