2016-09-25 9 views
1

入力が多いため、最後の入力の出力は表示されません。 15個以上の異なる入力を入力すると、出力は与えられた出力数よりも1つ少なくなります。表示されていない出力が最後の出力です。cmdでプロンプトを使って適切な出力が得られません。プロンプト

Scanner sc = new Scanner(System.in); 
    int t=sc.nextInt(); 

    while(sc.hasNext()) 
    { 

     try 
     { 
      long x=sc.nextLong(); 
      System.out.println(x+" can be fitted in:"); 
      if(x>=-128 && x<=127)System.out.println("* byte"); 
      if(x>=-pow(2,15) && x<pow(2,15))System.out.println("* short"); 
      if(x>=-(long)pow(2,31) && x<(long)pow(2,31))System.out.println("* int"); 
      if(x>=-(long)pow(2,63) && x<(long)pow(2,63))System.out.println("* long"); 

      //Complete the code 
     } 
     catch(Exception e) 
     { 
      System.out.println(sc.next()+" can't be fitted anywhere."); 
     } 

    } 
+0

完全なコードを入力してください。変更を加えずに実行すると、簡単に手助けすることができます。 – Aelexe

+0

あなたは本質的にnextInt()を取得し、tryブロックの最初の行の次のlongを取得することによって最初の入力をスキップしています。 – scrappedcola

答えて

0

あなたのコードの2行目は、入力から欠落した数字を説明する必要があります。最初の数字を入力から読み取ってから何もしません。

int t=sc.nextInt(); 

あなたのコードにはさらに問題があります。 あなたはこれらの行で行う(長い)にキャストから判断:私はおそらくint、あなたのpow関数はlongを返さないことを推測している

 if(x>=-(long)pow(2,31) && x<(long)pow(2,31))System.out.println("* int"); 
     if(x>=-(long)pow(2,63) && x<(long)pow(2,63))System.out.println("* long"); 

。そしておそらくpow関数内で行っている計算も整数で行われます。これにより、整数オーバーフローが発生し、不正な結果が返されます。それらをlongに変更する必要があります。

さらに、計算しようとしている最後の値は - pow(2,63) - できるt fit even intoですので、計算できません。私は代わりにLong.MAX_VALUEを使用しています。

+0

私はむしろ 'pow'が 'Math.pow'を参照していると確信しています。だから 'pow(2,63)'は 'long '値の範囲外にあるかもしれませんが' long(long)pow(2,63) 'は' Long.MAX_VALUE'に切り捨てます。実際の問題は、 ' - (long)pow(2,63)'と '' long(-pow)(2,63) 'の違いと' 'long''値変数がおそらく 'long '値の範囲外です... – Holger

関連する問題