2016-09-25 62 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

相关问题