尝试查找包含未知整数量的java代码的最小值时出错

尝试查找包含未知整数量的java代码的最小值时出错,java,Java,我必须编写一个代码,接收未知数量的用户输入整数,找到最小值和最大值,并找到整数的平均值。这就是我目前所拥有的 package HW2_Min_Max; import java.util.Scanner; public class HW3 { public static void main(String[] args) { Scanner myScanner = new Scanner(System.in); System.out.p

我必须编写一个代码,接收未知数量的用户输入整数,找到最小值和最大值,并找到整数的平均值。这就是我目前所拥有的

package HW2_Min_Max;

import java.util.Scanner; 


public class HW3 {


    public static void main(String[] args) {

        Scanner myScanner = new Scanner(System.in);

            System.out.println("Please input first interger");
        int number=0; //number is to store number of inputs 
        int i=1; //i is to store current iteration
        int sum=0; //sum is to store sum of the input 
        int x=0; //x is to store the user input
        int min=x, max=x; 

        number = myScanner.nextInt(); 

        if(x>=0)
            while (x >= 0){
            System.out.println("Please input the next positive interger ");
            x = myScanner.nextInt();
            sum = sum + x;
            number = number++;
            if (x >= max)
                max = x;
            if (x <= min)
                min =x;
            i++;
        }    




        int average = sum/number;

        System.out.println("The average is " + average);


        System.out.println("The minimum value is " + min);
        System.out.print( "and the maximum value is " + max);
        }
    }
包装HW2\u最小值\u最大值;
导入java.util.Scanner;
公共级HW3{
公共静态void main(字符串[]args){
Scanner myScanner=新扫描仪(System.in);
System.out.println(“请输入第一个整数”);
int number=0;//number用于存储输入的数量
int i=1;//i用于存储当前迭代
int sum=0;//sum用于存储输入的和
int x=0;//x用于存储用户输入
int min=x,max=x;
number=myScanner.nextInt();
如果(x>=0)
而(x>=0){
System.out.println(“请输入下一个正整数”);
x=myScanner.nextInt();
sum=sum+x;
数字=数字++;
如果(x>=最大值)
max=x;
if(x
publicstaticvoidmain(字符串[]args){
Scanner myScanner=新扫描仪(System.in);
int number=0;//number用于存储输入的数量
int i=1;//i用于存储当前迭代
int sum=0;//sum用于存储输入的和
int x=0;//x用于存储用户输入
int min=Integer.MAX\u值,MAX=Integer.min\u值;
while(true){
System.out.println(“请输入下一个正整数”);
x=myScanner.nextInt();
如果(x>=0){
sum=sum+x;
数字++;
如果(x>=最大值)
max=x;
if(x0)
平均值=总和/数量;
System.out.println(“平均值为”+平均值);
System.out.println(“最小值为”+min);
系统输出打印(“最大值为”+max);
}

我已经对您的代码进行了更正。这应该可以工作。我已经删除了一些冗余代码。我认为即使这样,它也应该可以工作。

从正确设置最小值和最大值开始:

int min=Integer.MAX_VALUE, max=Integer.MIN_VALUE;
这将确保更新
min
max

其次,正如我在评论中所写,如果
x
为负值,则在阅读
x
后立即退出循环:

x = myScanner.nextInt();
if (x < 0) {
    break;
}
改为:

number++;
因为操作
number++
不返回值

重要:学习如何使用好的IDE(例如:IntelliJ/Eclipse/Netbeans)以及如何使用调试器将是一个好主意

完整代码:

    Scanner myScanner = new Scanner(System.in);
    int number=0; //number is to store number of inputs
    int i=1; //i is to store current iteration
    int sum=0; //sum is to store sum of the input
    int x=0; //x is to store the user input
    int min=Integer.MAX_VALUE, max=Integer.MIN_VALUE; // fix 1

    while (x >= 0){
        System.out.println("Please input the next positive integer");
        x = myScanner.nextInt();
        if (x < 0) {  // fix 2
            break;
        }
        if(x>=0) {
            sum = sum + x;
            number++;   // fix 3
            if (x >= max)
                max = x;
            if (x <= min)
                min =x;
            i++;
        }
    }
    int average = sum/number;
    System.out.println("The average is " + average);
    System.out.println("The minimum value is " + min);
    System.out.print( "and the maximum value is " + max);

代码中存在一些问题。第一次扫描的整数值在计算中被忽略。并且始终最小值为零,因为“int min=0” 我对你的代码做了一些修改,试试这个

public static void main(String[] args) {

  Scanner myScanner = new Scanner(System.in);

  System.out.println("Please input first integer");
  int number = 0; //number is to store number of inputs
  int sum = 0; //sum is to store sum of the input
  int x; //x is to store the user input
  int min = Integer.MAX_VALUE, max = 0;

  x = myScanner.nextInt();

  while (x >= 0) {
    sum = sum + x;
    number++;
    if (x >= max) {
      max = x;
    }
    if (x <= min) {
      min = x;
    }
    System.out.println("Please input the next positive integer ");
    x = myScanner.nextInt();
  }

  int average = sum / number;

  System.out.println("The average is " + average);
  System.out.println("The minimum value is " + min);
  System.out.print("and the maximum value is " + max);
}
publicstaticvoidmain(字符串[]args){
Scanner myScanner=新扫描仪(System.in);
System.out.println(“请输入第一个整数”);
int number=0;//number用于存储输入的数量
int sum=0;//sum用于存储输入的和
int x;//x用于存储用户输入
int min=Integer.MAX_值,MAX=0;
x=myScanner.nextInt();
而(x>=0){
sum=sum+x;
数字++;
如果(x>=最大值){
max=x;
}

如果(x)在
x=myScanner.nextInt()之后添加一个条件;
如果数字为负数,则将其从循环中断开。在使用输入之前,您需要检查它是否是您的退出条件。您不能使用它,然后在下一次通过时再进行检查,否则就太晚了。此外,如果(c){while(c){…},您永远不需要执行
if(c){
。在每次迭代(包括第一次迭代)之前,都会对while条件进行评估和测试。您是否可以只执行while(不使用if)。问题来自变量
number
。变量
number
是保存输入/值的内容,而不是您所说的输入数量。这是因为
myScanner.nextInt();
将从控制台检索值并将其分配给数字。因此,输入的任何负值都肯定会影响平均值,但不会像您所说的那样影响最小值。只需删除这一行
number=myScanner.nextInt();
。这可能会解决问题。@alfasin,我尝试添加if(xIt),直到输入一个负数,提示我“构建失败。”在程序执行的中间,构建怎么会失败?这是没有意义的。它告诉我的确切的事情是“线程中的异常”,主要是“java. Lang.TrimeExtExcExc:/0”。"@F.ochoa15这与构建无关-这是一个由负输入引起的运行时错误。@F.ochoa15角落案例中有一个错误。请立即检查。感谢您指出。目前正在使用NetBeans,但我仍然存在问题。似乎我唯一的问题仍然是平均值和最小值。我完全按照您的要求进行了更新当我输入1,2,3,4,5作为整数时,这是最终结果。请输入第一个整数1请输入下一个正整数2请输入下一个正整数3请输入下一个正整数4请输入下一个正整数5请输入下一个正整数-1平均值为2最小值为2d最大值is@F.ochoa15我添加了完整的更正代码。它对我来说很好。@F.ochoa15阿尔法辛提供的答案应该适合您。请注意,变量
I
是无用的。变量
number
可以达到它的目的。
    Scanner myScanner = new Scanner(System.in);
    int number=0; //number is to store number of inputs
    int i=1; //i is to store current iteration
    int sum=0; //sum is to store sum of the input
    int x=0; //x is to store the user input
    int min=Integer.MAX_VALUE, max=Integer.MIN_VALUE; // fix 1

    while (x >= 0){
        System.out.println("Please input the next positive integer");
        x = myScanner.nextInt();
        if (x < 0) {  // fix 2
            break;
        }
        if(x>=0) {
            sum = sum + x;
            number++;   // fix 3
            if (x >= max)
                max = x;
            if (x <= min)
                min =x;
            i++;
        }
    }
    int average = sum/number;
    System.out.println("The average is " + average);
    System.out.println("The minimum value is " + min);
    System.out.print( "and the maximum value is " + max);
Please input the next positive integer
1
Please input the next positive integer
2
Please input the next positive integer
3
Please input the next positive integer
4
Please input the next positive integer
5
Please input the next positive integer
-1
The average is 3
The minimum value is 1
and the maximum value is 5
Process finished with exit code 0
public static void main(String[] args) {

  Scanner myScanner = new Scanner(System.in);

  System.out.println("Please input first integer");
  int number = 0; //number is to store number of inputs
  int sum = 0; //sum is to store sum of the input
  int x; //x is to store the user input
  int min = Integer.MAX_VALUE, max = 0;

  x = myScanner.nextInt();

  while (x >= 0) {
    sum = sum + x;
    number++;
    if (x >= max) {
      max = x;
    }
    if (x <= min) {
      min = x;
    }
    System.out.println("Please input the next positive integer ");
    x = myScanner.nextInt();
  }

  int average = sum / number;

  System.out.println("The average is " + average);
  System.out.println("The minimum value is " + min);
  System.out.print("and the maximum value is " + max);
}