我怎么能不在最终结果中记录0

piztneat  于 2021-08-20  发布在  Java
关注(0)|答案(3)|浏览(207)

我正在做一个方法练习,是关于输入一些大于-50000和小于50000的值,当用户输入0时,程序停止并计算一些结果。我的问题是,当我输入所有正数并输入0退出时,程序将保存0号并在最终结果中显示给我的最小数,这意味着当我输入1,2,3,4,0时,最小数应为1而不是0,因为0用于退出程序。我想我知道这个问题在for循环中,最小的是保存输入值,但是我不知道如何解决这个问题来分离输入号和退出号。

package exercise;
import java.util.Scanner;

public class array {
    static final Scanner input = new Scanner(System.in);
    public static void main(String[] args) {

    System.out.println("Input some numbers , press 0 to exit");
    check();

}

    public static void check() {
        int pos=0;
        int neg=0;
        double topos=0;
        double toneg=0;
        double lar=0;
        double sma=0;
        double in;

        do {
            in = input.nextDouble();

            if(in>0 && in <50000) {
                pos++;
                topos=topos+in;

            }else if(in <0 && in>-50000) {
                neg++;
                toneg+=in;
            }
            for(double i=0;i<pos+neg;i++) {
                if(in>lar) {
                    lar=in;
                }
                if(in<sma &&in !=0) {
                    sma=in;
                }

            }
            }while(in !=0);

            System.out.println(neg+pos+" numbers input");
            System.out.println("Total pos "+topos);
            System.out.println("Total neg "+toneg);
            System.out.println("Aver pos "+topos/pos);
            System.out.println("Ave neg "+toneg/neg);
            System.out.println("Ave all "+(topos+toneg)/(pos+neg));
            System.out.println("Largest number "+lar);
            System.out.println("Smallest number "+sma);

    }

}
odopli94

odopli941#

正如@sinclair在评论中指出的,您正在初始化 sma 在0中,因此只能替换 sma 的值是负数。要修复它,请初始化 sma 您的程序应该认识到最大的价值。这样,每个不是0的数字都将在比较和重新计算中正确使用 sma 的值(如果需要)。
改变 sma=0; 对于 sma=50000; 我使用50000作为您检查的最大值是49999,如果这是用户输入的唯一数字,那么它是最小的。

k2arahey

k2arahey2#

尝试使用@sinclair添加的有意义的标识符名称。您需要将第一个元素初始化为最小和最大的元素,这可能是一个可行的解决方案。

public static void check() {
    int pos=0;
    int neg=0;
    double topos=0;
    double toneg=0;
    double lar;
    double sma;
    double in;
    in = input.nextDouble();
    sma = in;
    lar = in;
    do {
          if(in>0 && in <50000) {
              pos++;
              topos=topos+in;

          }else if(in <0 && in>-50000) {
              neg++;
              toneg+=in;
          }
          if(in>lar) {
              lar=in;
          }
          if(in<sma && in!=0) {
              sma=in;
          }
          in = input.nextDouble();
        }while(in !=0);

        System.out.println(neg+pos+" numbers input");
        System.out.println("Total pos "+topos);
        System.out.println("Total neg "+toneg);
        System.out.println("Aver pos "+topos/pos);
        System.out.println("Ave neg "+toneg/neg);
        System.out.println("Ave all "+(topos+toneg)/(pos+neg));
        System.out.println("Largest number "+lar);
        System.out.println("Smallest number "+sma);

}
x759pob2

x759pob23#

我想建议您将读取值从输入和处理分离为两种不同的方法。这种方法的优点是可以将退出的条件与逻辑的其余部分分开。

static final Scanner input = new Scanner(System.in);

public static void main(String[] args) {
    var numbers = getNumbers();

    check(numbers);
}

private static List<Double> getNumbers() {
    System.out.println("Input some numbers , press 0 to exit");

    List<Double> numbers = new ArrayList<>();
    double number;

    while (true) {
        number = input.nextDouble();

        if (number == 0) {
            break;
        }

        numbers.add(number);
    }
    return numbers;
}

public static void check(List<Double> numbers) {
    System.out.println(numbers);

    int pos=0;
    int neg=0;
    // ... other values

    for (int i = 0; i < numbers.size(); i++) {
        double number = numbers.get(i);

        if (number > 0 && number < 50000) {
            pos++;
            topos = topos + in;
        }

        // ... other checks
    }

    System.out.println(neg + pos + " numbers input");
    System.out.println("Total pos " + topos);
    System.out.println("Total neg " + toneg);
    System.out.println("Aver pos " + topos / pos);
    System.out.println("Ave neg " + toneg / neg);
    System.out.println("Ave all " + (topos + toneg) / (pos + neg));
    System.out.println("Largest number " + lar);
    System.out.println("Smallest number " + sma);
}

相关问题