慕尼黑8549860
2022-06-04 10:40:03
我編寫了一個(gè)程序來(lái)確定任何輸入是否適合 java 中各種數(shù)據(jù)類型的范圍,以及是否打印符合條件的數(shù)據(jù)類型。該程序首先需要一個(gè)整數(shù)輸入來(lái)確定我要測(cè)試其資格的總常數(shù)。然后,它會(huì)按查詢確定的所需次數(shù)運(yùn)行循環(huán),以檢查輸入的每個(gè)常量的資格。我面臨的問(wèn)題是——我正在檢查單個(gè)輸入的資格,但是當(dāng)我輸入“-100000000000000”(-1 后跟 14 個(gè)零)時(shí),沒(méi)有輸出,光標(biāo)接受輸入,然后只是閃爍無(wú)限期地。任何其他常量輸入都會(huì)提供所需的輸出,但程序問(wèn)題僅在我輸入“-100000000000000”后才會(huì)出現(xiàn)。很長(zhǎng)一段時(shí)間以來(lái),我一直在嘗試自己解決問(wèn)題,因此任何線索都會(huì)對(duì)我有所幫助。這是我的代碼-->import java.util.*;import java.io.*;import static java.lang.Math.pow;class Solution{public static void main(String []argh){ Scanner sc = new Scanner(System.in); int t=sc.nextInt(); for(int i=0;i<t;i++) { try { long x=sc.nextLong(); System.out.println(x+" can be fitted in:"); if(x>=-128 && x<=127){ System.out.println("* byte"); } if(x>=(int)(pow(-2.00,15.00)) && x<=(int)(pow(2.00,15.00)-1)){ System.out.println("* short"); } if(x>=(int)(pow(-2.00,31.00)) && x<=(int)(pow(2.00,31.00)-1)){ System.out.println("* int"); } if(x>=(int)(pow(-2.00,63.00)) && x<=(int)(pow(2.00,63.00)-1)){ System.out.println("* long"); } } catch(Exception e) { System.out.println(sc.next()+" can't be fitted anywhere."); } }}}
1 回答

陪伴而非守候
TA貢獻(xiàn)1757條經(jīng)驗(yàn) 獲得超8個(gè)贊
我在您的代碼中看到您正在嘗試解析pow(-2.00,63.00)為整數(shù),它不會(huì)返回您期望的值。
您可以像這樣在 Long 數(shù)據(jù)類型檢查中替換您的轉(zhuǎn)換:
if(x>=(long)(pow(-2.00,63.00)) && x<=(long)(pow(2.00,63.00)-1)){
System.out.println("* long");
}
此外,以防萬(wàn)一您不知道,您可以分別使用“Long.MIN_VALUE | Long.MAX_VALUE”而不是“pow(-2.00,63.00) 和 pow(2.00,63.00)-1”。其他數(shù)據(jù)類型(Byte、Short、Integer)也是如此。
添加回答
舉報(bào)
0/150
提交
取消