当前位置: 首页 > 知识库问答 >
问题:

如何让这段代码停止在非数字的地方?

濮君植
2023-03-14

我正在尝试制作一个程序,提示用户输入数字,直到输入一个非数值。此时,它结束并打印:计数、总和、平均值、最小值和最大值。我得到一个“int不能被取消引用”的错误。我不知道该怎么办。

import java.util.Scanner;
public class Program3
{
   public static void main(String[] args)
{
      Scanner input = new Scanner(System.in);
      System.out.println("Enter an floating point number");
      int count = 1;
      int sum = 0;
      int min = 100000;
      int max = 1;
      int check=0;
      while(check==0)
      {
          int number = input.nextInt();
          if(number.hasNextInt())
          {
              count++;
              sum=sum+number;
              while(number<min)
                 min = number;

              while(input>max)
                 max = number;
          }       
          else
          {
              check=1;
          }
      }
      System.out.println("The count is " +count);
      System.out.println("The sum is " +sum);
      System.out.println("The average is " +sum/count);
      System.out.println("The minimum is " +min);
      System.out.println("The maximum is " +max);
      System.exit(0);    
   }
}

共有2个答案

齐琦
2023-03-14

我会尝试从用户那里获取一个字符串,然后将其解析为浮点数。如果我在将其解析为浮点数(或双精度)时遇到异常,则会出现一个非数字值。

孟财
2023-03-14
int number = input.nextInt();

如果下一个输入不是int,将给出一个异常。

解决方法是在 try catch 块中用此语句括起来,并在 catch 块中执行在非数字被填充后要执行的任何操作。

这两个问题的解释:假设你有

1个

2个

4个

一个

当它遇到 4 时,它分配数字 = 4,然后检查下一个值是否也是 int ,

if(number.hasNextInt()),这是false因为下一个输入是'a',所以这个ifblock不会运行,它对您的上次遇到的int进行处理。

但是,while 仍将转到下一个迭代,并且会尝试从下一个输入中获取 int即 a,因此给出一个异常

页(page的缩写)我还相信你打算写< code>input.hasNextInt()而不是< code>number.hasNextInt()

 类似资料:
  • 当我添加水平进度条时,它的行为和预期的一样——我设置了进度值并显示了它。 但是,当我添加ProgressBar(圆形)时,它会旋转。就这样。在这种形式下,更多的是“请等待”指示器,即任何进度条,因为没有显示进度值。 所以我的问题是(假设名义上的进步意味着进步)——如何停止旋转并显示进步的价值?例如,如果我将max设置为100,将value设置为50,我希望看到半圆弧。 换句话说,如何使圆形的Pro

  • 嘿,各位程序员们,我有一个很有趣的问题,也很简单。我正在与esp32和那里我正在与2个多路复用7段显示器。我已经创建了我的代码,它也在工作,但我想让我们说一个更漂亮的方式来编码这些行。我已经将我的数字拆分为2个数字(例如34-->[3,4]),然后我用这个if-elif来查看,并添加正确的行(用于GPIO上的输出),所以3将是0000110。你有什么想法让这段代码变得容易得多吗? 非常感谢您的帮助

  • 如何在PHP Smarty中优化这段代码? 现在我有一个代码让我困惑,有一个简单的代码。 当我搜索需要推送值的代码时。 优化如何发挥作用?我能写到数组吗?如果它可以写入数组,我该怎么办?

  • 我已经开始学习JavaScript,我试图制作一个加载条的动画,但我不知道如何使它在条到达终点后重复这个功能,我想也许通过一个循环我可以得到我想要的结果,但我仍然在学习循环,我尝试了不同的方法,改变了整个代码,但没有任何效果。 有人能帮我吗?谢谢你抽出时间。

  • 实际上,下面的代码不能用这个命令用Clang编译: . 我只想模仿与C中的“交换习惯用法”相同的行为,使用“using directive”来启用ADL。但是下面的代码哪里错了呢?预期的调用优先级应为:N1::foo 错误消息: 更新: 我将N2::foo更改为可以在某种程度上模仿std::交换的模板方法。所以,这里的问题是为什么不能由在函数中?因为当它们具有相同的优先级时,该函数应该比要调用的模

  • 默认情况下,当Storm喷口或螺栓遇到异常时,它会重新启动喷口或螺栓,然后再试一次。是否有任何配置选项使它停止拓扑,也许在N次重复尝试之后?(例如,Hadoop尝试了4次才放弃。) 我有一个Storm拓扑运行了77天,一个螺栓在每个元组上引发一个异常。在这种情况下,我宁愿它失败,这样我就会注意到有问题。