0

我不明白关于以下问题的额外信用问题。我已经实现了 try-catch 语句并且似乎工作正常,但是我们的讲师现在希望我们boolean在循环条件中使用变量而不是data !=0。我正在猜测:

while(data!=0.0)

但这将如何运作?我是否完全摆脱它而只使用boolean我已经创建的?PS:我意识到这可能非常简单,我只是没有看到它。

import java.util.*;

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

        double data = 1.0;
        double sum = 0.0;
        boolean valid = false;
        while (!valid) {
            try {
                while (data != 0.0) {
                    System.out.print("So far, sum = " + sum
                       + "\nEnter a number or 0 to exit: ");
                    data = input.nextDouble();
                    sum = sum + data;
                    valid = true;
                }
            } catch (InputMismatchException e) {
                System.out.println("Error--please enter a double number");
                input.next();
            } catch (NoSuchElementException e) {
                System.out.println("\nGoodbye!");
                System.exit(0);
            }
        }
        System.out.println("Ending sum: " + sum);
    }
}
4

4 回答 4

2

我已经更新了您的程序,以使用布尔值而不是 (data != 0.0) ,正如您的讲师所期望的那样。找到下面的程序:

import java.util.*;

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

        double data = 1.0;
        double sum = 0.0;
        boolean valid = false;
        while (!valid) {
            try {
                while (true) {
                    System.out.print("So far, sum = " + sum
                            + "\nEnter a number or 0 to exit: ");
                    data = input.nextDouble();
                    sum = sum + data;
                    valid = true;
                    if (data == 0.0) {
                        break;
                    }
                }
            } catch (InputMismatchException e) {
                System.out.println("Error--please enter a double number");
                input.next();
            } catch (NoSuchElementException e) {
                System.out.println("\nGoodbye!");
                System.exit(0);
            }
        }
        System.out.println("Ending sum: " + sum);
    }
}

希望它能解决你的问题!

于 2013-04-16T08:27:43.370 回答
1

我想他想要

public class SumInput {
    public static void main(String... ignored) {
        Scanner input = new Scanner(System.in);
        double sum = 0.0;
        while (true) {
            System.out.println("So far, sum = " + sum);
            System.out.print("Enter 'exit' to exit: ");
            if (!input.hasNextDouble())
                break;
            sum += input.nextDouble();
        }
        System.out.println("Ending sum: " + sum);
    }
}

跑起来像

So far, sum = 0.0
Enter 'exit' to exit: 122
So far, sum = 122.0
Enter 'exit' to exit: 232.2
So far, sum = 354.2
Enter 'exit' to exit: 322
So far, sum = 676.2
Enter 'exit' to exit: exit
Ending sum: 676.2

这更清晰、更安全,因为您可能希望对 0.0 不是最后一个值的值求和。

使用此循环,您将能够删除您当前拥有的大部分代码。

于 2013-04-16T08:14:29.893 回答
0
boolean valid = true;
while (valid) {
    if((data =input.nextDouble()) != 0.0)
        valid = true;
    else
       valid = false;

// perform your calculation.
}
于 2013-04-16T08:17:18.807 回答
0

永远不要使用 double in 作为逻辑(停止)条件,尤其是使用==or !=

您的代码中的一个问题是data == 0.0这种双精度表示非常困难,尤其是在您执行某些计算时。这是由表示错误引起的

当您使用0时,作为停止条件,我将从用户输出中删除它,并只留下Enter键作为退出循环的唯一方法。

于 2013-04-16T08:39:06.430 回答