2016-12-03 12 views
-3

您好,在此先感谢,Scanner.hasNextLong错误

我在与java.util.Scanner中这里的一个问题是我的代码:

public static void ScanInput(String Choice) { 

    if(scanner.hasNextLong()){ 

     long input = scanner.nextLong(); 
     long length = String.valueOf(input).length(); 

     if(length <= 10){ 

      if(Choice == Choice1){ 

       Converter.Decimal(input); 

      } else if(Choice == Choice2) { 

       Converter.Binary(input); 

      } 
     } else { 

      System.out.println(error); 

      scanner.close(); 

      ScanInput(DecimalToBinary.choice); 
     } 


    } else { 

     System.out.println(error); 

     scanner.close(); 

     ScanInput(DecimalToBinary.choice); 

    } 

    scanner.close(); 
} 

利用这个其实并不重要。问题是,当我输入一个大于10位的值时,它会崩溃。所以,似乎我使用了一个整数左右?

(由于int的最大大小)。在

但我用很长....

我调试教练点,如果(scanner.hasNextLong()){

而这也是在那里的东西去拉屎的地方。 .. 请帮忙!

+2

*大于10位*精确度有多大? – Tunaki

回答

1

如果该值大于9223372036854775807(长MAX值),然后使用BigInteger,像这样:

if (scanner.hasNextBigInteger()) { 
    BigInteger big = scanner.nextBigInteger(); 
} 

眼下编译器处理你的输入作为整数显然你长的输入不有后缀L.在java长尾L,例如:

long lg = 24863512789L; 

解决这个问题,它会正常工作。

+0

点是......它不是那么大......所以我不明白为什么长时间不工作 – Neriesta

+0

我看不到你初始化扫描仪,扫描仪扫描仪=新扫描仪(System.in); –

+0

它是否适用于输入<10位数字? –