【问题标题】:How can i calculate the sum correctly without using sum++;?如何在不使用 sum++ 的情况下正确计算总和;?
【发布时间】:2017-05-16 01:30:58
【问题描述】:

所以我目前正在做一个项目,这一步要求我编写一个要求输入数字的程序,当输入“-1”时,它将计算除 -1 之外的所有输入数字的总和。我只是通过在循环后添加 +1 来解决此问题,但我确信还有另一种“正确”的方法,我想了解如何。

感谢任何帮助。 (注意:我只学习 Java 一周左右,所以请 ELI5)

public static void main(String[] args) {
            // program in this project exercises 36.1-36.5
            // actually this is just one program that is split in many parts

            Scanner reader = new Scanner(System.in);

            int numbertyped = 0;
            int sum = 0;

            System.out.println("Type numbers: ");

            while (numbertyped != -1) {

                numbertyped = Integer.parseInt(reader.nextLine());

                sum = sum + numbertyped;

            }
            sum++;
            System.out.println("Thank you and see you later!");
            System.out.println("The sum is " + sum);

编辑:我的程序现在完成了。我使用了在 while 循环中添加中断的解决方案,在添加了我想要的其余功能之后,这就是最终产品:(如果有人有关于如何改进我的代码或使其更高效的提示,请发表评论!)

    import java.util.Scanner;

    public class LoopsEndingRemembering {

        public static void main(String[] args) {
            // program in this project exercises 36.1-3


        // actually this is just one program that is split in many parts

        Scanner reader = new Scanner(System.in);

        int numbertyped = 0;
        int sum = 0;
        int howmany = 0;
        int evencounter = 0;
        int oddcounter = 0;

        System.out.println("Type numbers: ");

        while (true) {

            numbertyped = Integer.parseInt(reader.nextLine());

            if (numbertyped == -1) 
            {
                break;
            }

            if (numbertyped % 2 == 0)

            {
                evencounter++;
            } 

            else 

            {
                oddcounter++;
            }

            sum = sum + numbertyped;
            howmany++;

        }

        double average = (double) sum / howmany;

        System.out.println("Thank you and see you later!");
        System.out.println("The sum is " + sum);
        System.out.println("How many numbers: " + howmany);
        System.out.println("Average: " + average);
        System.out.println("Even numbers: " + evencounter);
        System.out.println("Odd numbers: " + oddcounter);

    }
}

【问题讨论】:

  • 快速但有点糟糕的解决方案是... int sum = 1 一开始。您可以在增加总和之前添加一个 if 语句。
  • 在加到总和之前,我最终使用了带有中断的 if 语句。

标签: java


【解决方案1】:

您可以在输入-1 后立即终止循环,更改

while (numbertyped != -1) {
    numbertyped = Integer.parseInt(reader.nextLine());

类似

while ((numbertyped = Integer.parseInt(reader.nextLine())) != -1) {
    // ...

-1 分配给numbertyped 时,不会进入循环体。

根据您的编辑,我建议您可以将sum = sum + numbertyped; 缩短为sum += numbertyped;,并且您可以通过将evencounteroddcounter 相加来计算howmany。喜欢,

System.out.println("Type numbers: ");
while (true) {
    numbertyped = Integer.parseInt(reader.nextLine());
    if (numbertyped == -1) {
        break;
    }
    if (numbertyped % 2 == 0) {
        evencounter++;
    } else {
        oddcounter++;
    }
    sum += numbertyped;
}
int howmany = evencounter + oddcounter;
double average = (double) sum / howmany;

【讨论】:

  • 是的!伟大的!为什么不在while() 语句中编写整个程序,以防万一... B-)
【解决方案2】:

在类似情况下,类 C 语言用户通常不会使用“退出循环”(break)。你会想要这样的东西:

    while (true)
    {

        numbertyped = Integer.parseInt(reader.nextLine());

        if(numbertyped == -1)
        {
            break;
        }

        sum = sum + numbertyped;
    }

作为旁注,“永久循环”可以用for(;;) 编写,有人说它比while(true) 更好。然而,大多数人认为while(true) 更容易阅读。我个人使用for(;;)。无论哪种方式都已正确优化,因此您不会获得运行时差异。

关于for(;;)的参考: while (1) Vs. for (;;) Is there a speed difference?

【讨论】:

    【解决方案3】:

    我认为在这种情况下,您可以颠倒 while 循环中语句的顺序。

            int numbertyped = 0;
            int sum = 0;
    
            System.out.println("Type numbers: ");
    
            while (numbertyped != -1) {
    
                sum = sum + numbertyped;
    
                numbertyped = Integer.parseInt(reader.nextLine());
    
            }
    

    第一次循环时,numberTyped 为 0,这是完美的 - 它不会退出循环,并且实际上不会向总和添加任何内容。之后,在您检查它是否为 -1 之前,它不会改变总和。

    【讨论】:

    • 好主意,我没想到!
    猜你喜欢
    • 1970-01-01
    • 2011-03-15
    • 1970-01-01
    • 2010-11-12
    • 1970-01-01
    • 2018-10-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多