2016-09-25 59 views
1

對於大量輸入輸出的最後一個輸入沒有顯示出來。 當我用來輸入15個或更多的不同的輸入我得到的輸出是一個比給定的輸出數少。不顯示的輸出是最後一個輸出。我沒有在java中使用cmd得到正確的輸出.prompt

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

嗯,我想,你的代碼的第二行應該解釋從輸入缺少的數字。你讀從輸入第一個數字,然後什麼都不做吧:

int t=sc.nextInt(); 

但也有更多的問題與您的代碼。 從鑄造到(長)你在這行做判斷:

 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,但可能int。也許你在做的計算也在pow函數中完成整數。這將導致整數溢出並返回不正確的結果。您應該將它們更改爲long

此外,你正試圖計算的最後一個值 - pow(2,63) - 可以t fit even into長`,所以你不能計算它。我建議使用Long.MAX_VALUE來代替。

+0

我寧願打賭'pow'指的是'Math.pow'。所以'pow(2,63)'可能超出'long'值範圍,但是'(long)pow(2,63)'會將它減小到'Long.MAX_VALUE'。一個真正的問題是' - (long)pow(2,63)'和'(long)-pow(2,63)'之間的區別,以及試圖檢查'long'變量可能超出「長」值範圍...... – Holger

相關問題