我正在做一个方法练习,是关于输入一些大于-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);
}
}
3条答案
按热度按时间odopli941#
正如@sinclair在评论中指出的,您正在初始化
sma
在0中,因此只能替换sma
的值是负数。要修复它,请初始化sma
您的程序应该认识到最大的价值。这样,每个不是0的数字都将在比较和重新计算中正确使用sma
的值(如果需要)。改变
sma=0;
对于sma=50000;
我使用50000作为您检查的最大值是49999,如果这是用户输入的唯一数字,那么它是最小的。k2arahey2#
尝试使用@sinclair添加的有意义的标识符名称。您需要将第一个元素初始化为最小和最大的元素,这可能是一个可行的解决方案。
x759pob23#
我想建议您将读取值从输入和处理分离为两种不同的方法。这种方法的优点是可以将退出的条件与逻辑的其余部分分开。