2016-09-09 10 views
-1

これはほぼ完了しています。 Outputです。私のメソッドは完全に動作しているので、それは問題ではありません。出力は最良の説明を与えますが、基本的に4096個のランダムな整数のリストを出力し、ユーザーの入力に数字を尋ねなければなりません。その番号で、私はそれを見つけるのに必要なループの数をユーザーに伝えなければなりません。問題は、それが正しくカウントされていないということです。出力にある数字はスキップされ、見つからない場合は両方のifステートメントが出力されます。私はすでに1d配列用にこのプログラムを構築しており、Arraylistを使用することはできません。ありがとう!2dアレイループカウントが正しく機能していません

Scannner s = new Scanner(System.in); 

    int[][] input = new int[5][1]; 
    int[][] arrayone = new int[4097][1]; 
    int loop = 0; 

for (int id = 0; id < input.length; id++) { 
    for (int x = 0; x <input[id].length; x++) { 
     System.out.println("Please enter a number between " + min + " and " + max); 
     input[id][x] = s.nextInt(); 

     if (min <= input[id][x] && input[id][x] <= max) { 
      for (int count = 0; count < arrayone.length; count++) { 
       for (int count2 = 0; count2 < arrayone[count].length; count2++) { 
        if (arrayone[count][count2] != input[id][x]) { 
         loop++; 
        } 
        else { 
         break; 
        } 
       } 
      } 
     if (input[id][x] != arrayone.length){ 
      System.out.println("It took " + loop + " time(s) to find the number " + input[id][x]); 
     } 
     if(loop > 4096) { 
      System.out.println(input[id][x] + " was not found"); 
     } 
     loop = 0; 
    } 
} 

更新:

私は自分自身を更新するために、以下のコードの一部を使用しているし、今印刷は4096を見つけたか、いないか、ここUpdated Outputです。以下は、私が提案に従って、コードに加えた変更です:

if(loop > 4096) { 
     System.out.println(input[id][x] + " was not found"); 
     } 
     else{ 
     System.out.println("It took " + loop + " time(s) to find the number " + input[id][x]); 
     } 
     loop = 0; 
+0

説明しようとしていることを説明してください。たくさんのコードを投げて「それはほとんど働いて、助けてください」と言ってはいけません。 – Kayaman

+0

さて、私はそれを編集しました。これで十分かどうか教えてください。 – Millie

+0

いくつかの奇妙なことがあります。 '4096'のランダムな整数が必要ですが、' 4097'のサイズの配列を作成しています。また、2D配列も使用していますが、名前だけに使用しています。 2番目の次元はサイズ '1'なので、 'new int [4097] [1];'は 'new int [4097]'とほぼ同じです。 'x'と' count2'変数は両方とも常に '0'なので、無用です。 – Kayaman

答えて

0

コメントで述べたように、あなたのコードは、アドレス指定の必要があるいくつかの奇妙、特に寸法を有します。これは、ラベルのないブレークが最も内側のループから壊れるだけであるため、外側のループから抜け出してbreak文で検索処理を終了していないという事実を隠す。 1次元以上の次元を持つ2D配列を作成すると、ラベルを使用して外側のループから抜け出すことができます。あなたの第二の問題については

outerloop: 
for (int count = 0; count < arrayone.length; count++) { 
    for (int count2 = 0; count2 < arrayone[count].length; count2++) { 
     loop++; //assume first check counts as one loop 
     if (arrayone[count][count2] == input[id][x]) { 
      break outerloop; 
     } 
    } 
} 

、あなたはあなたのプログラムのコードで奇妙を修正するよう数値を修正する必要があるかもしれませんが、あなたのプログラムは2つのだけの結果(見つかっまたは番号を見つけることができませんでした)を持っているので、あなたが使用することができます1回の検索につき1つの出力ダイアログを書くための単純なif/else文。

if(loop > 4096) { 
     System.out.println(input[id][x] + " was not found"); 
    } 
    else{ 
     System.out.println("It took " + loop + " time(s) to find the number " + input[id][x]); 
    } 
+0

最初の部分は私のために働いていない、私はそれを実装するとき、それはその番号が存在するかどうか1を印刷します。しかし、2番目の部分では、Not foundか4096のどちらかが出力されるという意味で、少し近づいてきました。 – Millie

0

まず、外側のforループ用の閉じ括弧がありません。

第2に、問題はbreak;が内側ループから壊れてしまい、外側ループが依然として継続するということです。これを修正する1つの方法は、両方のループの外側にブール値フラグを使用し、それを外にしたいときにtrueに設定することです。

+0

これはどのように実装できますか? – Millie

0

ありがとうございました!私はそれを働かせた!これが私のやり方です:

boolean foundit = false;   
    // if (min <= input[id][x] && input[id][x] <= max) { 
     for (int count = 0; count < arrayone.length && !foundit; count++) { 
      for (int count2 = 0; count2 < arrayone[count].length; count2++) {     
      if (arrayone[count][count2] == input[id][x]) { 
       foundit = true; 
       break; 
      } 
      else { 
       loop++; 
      } 
      } 
     } 
関連する問題