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

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

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

  1. package exercise;
  2. import java.util.Scanner;
  3. public class array {
  4. static final Scanner input = new Scanner(System.in);
  5. public static void main(String[] args) {
  6. System.out.println("Input some numbers , press 0 to exit");
  7. check();
  8. }
  9. public static void check() {
  10. int pos=0;
  11. int neg=0;
  12. double topos=0;
  13. double toneg=0;
  14. double lar=0;
  15. double sma=0;
  16. double in;
  17. do {
  18. in = input.nextDouble();
  19. if(in>0 && in <50000) {
  20. pos++;
  21. topos=topos+in;
  22. }else if(in <0 && in>-50000) {
  23. neg++;
  24. toneg+=in;
  25. }
  26. for(double i=0;i<pos+neg;i++) {
  27. if(in>lar) {
  28. lar=in;
  29. }
  30. if(in<sma &&in !=0) {
  31. sma=in;
  32. }
  33. }
  34. }while(in !=0);
  35. System.out.println(neg+pos+" numbers input");
  36. System.out.println("Total pos "+topos);
  37. System.out.println("Total neg "+toneg);
  38. System.out.println("Aver pos "+topos/pos);
  39. System.out.println("Ave neg "+toneg/neg);
  40. System.out.println("Ave all "+(topos+toneg)/(pos+neg));
  41. System.out.println("Largest number "+lar);
  42. System.out.println("Smallest number "+sma);
  43. }
  44. }
odopli94

odopli941#

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

k2arahey

k2arahey2#

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

  1. public static void check() {
  2. int pos=0;
  3. int neg=0;
  4. double topos=0;
  5. double toneg=0;
  6. double lar;
  7. double sma;
  8. double in;
  9. in = input.nextDouble();
  10. sma = in;
  11. lar = in;
  12. do {
  13. if(in>0 && in <50000) {
  14. pos++;
  15. topos=topos+in;
  16. }else if(in <0 && in>-50000) {
  17. neg++;
  18. toneg+=in;
  19. }
  20. if(in>lar) {
  21. lar=in;
  22. }
  23. if(in<sma && in!=0) {
  24. sma=in;
  25. }
  26. in = input.nextDouble();
  27. }while(in !=0);
  28. System.out.println(neg+pos+" numbers input");
  29. System.out.println("Total pos "+topos);
  30. System.out.println("Total neg "+toneg);
  31. System.out.println("Aver pos "+topos/pos);
  32. System.out.println("Ave neg "+toneg/neg);
  33. System.out.println("Ave all "+(topos+toneg)/(pos+neg));
  34. System.out.println("Largest number "+lar);
  35. System.out.println("Smallest number "+sma);
  36. }
展开查看全部
x759pob2

x759pob23#

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

  1. static final Scanner input = new Scanner(System.in);
  2. public static void main(String[] args) {
  3. var numbers = getNumbers();
  4. check(numbers);
  5. }
  6. private static List<Double> getNumbers() {
  7. System.out.println("Input some numbers , press 0 to exit");
  8. List<Double> numbers = new ArrayList<>();
  9. double number;
  10. while (true) {
  11. number = input.nextDouble();
  12. if (number == 0) {
  13. break;
  14. }
  15. numbers.add(number);
  16. }
  17. return numbers;
  18. }
  19. public static void check(List<Double> numbers) {
  20. System.out.println(numbers);
  21. int pos=0;
  22. int neg=0;
  23. // ... other values
  24. for (int i = 0; i < numbers.size(); i++) {
  25. double number = numbers.get(i);
  26. if (number > 0 && number < 50000) {
  27. pos++;
  28. topos = topos + in;
  29. }
  30. // ... other checks
  31. }
  32. System.out.println(neg + pos + " numbers input");
  33. System.out.println("Total pos " + topos);
  34. System.out.println("Total neg " + toneg);
  35. System.out.println("Aver pos " + topos / pos);
  36. System.out.println("Ave neg " + toneg / neg);
  37. System.out.println("Ave all " + (topos + toneg) / (pos + neg));
  38. System.out.println("Largest number " + lar);
  39. System.out.println("Smallest number " + sma);
  40. }
展开查看全部

相关问题