2017-02-17 3 views
0

質問をする際の推奨事項ではこれを禁止していませんが、特定の質問をしてルールに違反した場合は、教えてください。Java配列は、一致するものが見つかると終了を比較しませんか?

私はユーザー入力を以前のユーザー入力(1-9)と比較し、繰り返しを確認しようとしています。しかし、私のプログラムは繰り返しに遭遇しても止まらないでしょう。何が間違っているのですか?

import java.util.Scanner; 

public class No_Duplicates { 
    public static void main(String[] args){ 
     Scanner scan = new Scanner(System.in); 
     boolean repeat = false; 
     do { 
      int[] array = new int[9]; 
      for(int i = 1; i <= 9; i++) 
      { 
       System.out.println("Enter a number 1 - 9"); 
       int num = scan.nextInt(); 
       array[i] = num; 
       for(int j = 1; j <= i; j++) 
       { 
        if(num==array[j]) 
         repeat = true; 
       } 
      } 
     }while(!(repeat == true)); 
     System.out.println("No Duplicates Allowed!"); 
    } 
} 
+2

'while'ループは、あなたがtrueに' repeat'を設定したときにループを停止しますが、それが終了されるまで 'for'ループがない限り、続けていくだろうあなたは 'break'を追加します。 – khelwood

+0

btwの場合は、最後の反復でArrayIndexOutOfBoundsExceptionを取得します。あなたは 'int [] array = new int [10];'を実行するか、またはインデックス0から始まってそこからインクリメントする配列に値を入力することができます – ControlAltDel

+1

ところで 'while(!(repeat == true))' while(!repeat) 'と書かれています。 – khelwood

答えて

1

繰り返し要素に遭遇してもコードは停止しません。

0ではなく、1から配列インデックスにアクセスしていることにも気付きました。 Javaでは、配列インデックスは0から始まります。したがって、0から始まり、配列の長さより前に停止する必要があります。それ以外の場合は、ArrayIndexOutOfBoundsExceptionに移動します。ここで

はあなたが試すことができるものです。

boolean repeat = false; 

    int[] array = new int[9]; 

    for(int i=0 ; i<9 && repeat!=true ; i++)//checks for repeated input 
    { 
     System.out.println("Enter a number 1 - 9"); 
     int num = scan.nextInt();    
     array[i] = num; 

     for(int j=0; j<i; j++) 
     { 
      if(num==array[j]) 
      { 
      repeat = true; 
      break; //breaks out of the loop if encounters a repeated input 
      } 
     } 
    } 

if(repeat) 
    System.out.println("No Duplicates Allowed!"); 
+0

No Duplicatesは複製が許可されていないはずです - 私は自分のコードを –

+0

の上に編集しました。 – Nikhil

+0

動作するかどうか教えてください。 – Nikhil

関連する問題