2017-11-08 11 views
-3

整数配列を取得しようとしていて、失敗しています。私は配列の欠けている要素を見つけようとしています。ここに私のコードです。私はここで間違って何をしていますか?java.util.Scanner.nextInt(Unknown Source)failed

私は連続した自然数
の整数の配列で不足している要素を検索しようと
import java.util.Scanner; 
public class GFG { 

    public static void main(String[] args) { 
     int T,N,i,j=0,k=1; 
     int C[]= new int[100]; 
     Scanner sc=new Scanner(System.in); 
     T=sc.nextInt(); 
     for(i=0;i<T;i++) 
     { 
      N=sc.nextInt(); 
      for(j=0;j<N;j++) 
      { 
       C[j]=sc.nextInt(); 

      } 
      while(k<=N) 
      { 
       if(k==C[j]) 
       { 
        k++; 
        j++; 

       } 
       else 
       { 
        System.out.println(k); 
        k++; 
        j++; 
       } 
      } 
     } 
     sc.close(); 

    } 

} 

入力:

1    //test cases 
4    //array length    
1 2 3 5  // array elements    

所望の出力:

4  

しかし、出力は

です
1 
2 
3 
4 

比較が実行されていません。どうして?

+1

どのように正確に失敗しますか?エラー/例外が発生した場合は、それが何であるかを教えて、スタックトレースを表示する必要があります。 – csmckelvey

+2

Lemmeの推測では、おそらく 'System.in'の引用符を削除したいと思うでしょう。 –

+0

比較 'if(k == C [j])'は意味をなさない。 Cは倍精度の配列ですが、kはintです。あなたが何をしようとしているのか分かりません。しかし、これはおそらく正しい方法ではありません。 – jrook

答えて

0

私のコンピュータでは、あなたが言及した入力で、プログラムは1から96までの数字を表示し、if(k==C[j])java.lang.ArrayIndexOutOfBoundsException: 100でクラッシュします。

コードにはいくつかの問題があります。私はちょうど2つを言及し、あなたがもっと見つけることができるかどうかを見るためにそれをあなたに残します。あなたのループ後

  1. for(j=0;j<N;j++)jN(ここでは4)に等しいです。次のループの前に0にリセットする必要があります。
  2. kは決して0にならないので、ループwhile(k!=0)は永遠に実行されるか、より正確には配列の境界からはみ出します。これは、インデックス100の配列要素にアクセスしようとするとクラッシュします。 0〜99)。ループを停止する別の方法が必要です。
+0

ありがとう答えが望ましい出力を得たからです。 – Raneesh

関連する問題