我如何修复增加的订单总和代码?

时间:2013-11-09 09:49:15

标签: java

我想从java中读取用户输入的所有数字,只要用户输入的数字大于前一个数字。但我可以只为正数写它。如果包含所有数字,我如何修复下面的代码。如果可能的话,请为初学者编写解决方案,因为它是大学计算机科学的第一年,我还没有学到很多东西。

import acm.program.*;

public class IncreasingOrder extends ConsoleProgram {

public void run() {

    int previousNumber = 0;

    int total = 0;

    int count = 0;

    while(true) {
        int n = readInt("Enter > ");
        if (n <= previousNumber) break;

        total += n;
        count++;
        previousNumber = n;
    }
    println("You have entered " + count + " numbers in increasing order.");
    println("Sum of these " + count + " numbers is " + total + ".");        
}

}

3 个答案:

答案 0 :(得分:2)

使用Integer.MIN_VALUE代替0进行previousNumber初始化。 然后应该为负数工作。

答案 1 :(得分:0)

肯定你不会打破第一个号码。所以设置一个布尔值来存储状态。并且在输入第二个数字之前不要检查该数字是否更大。祝ACM好运。

import acm.program.*;

public class IncreasingOrder extends ConsoleProgram {

public void run() {

    int previousNumber = 0;

    int total = 0;

    int count = 0;
    boolean first = true;
    while(true) {
        int n = readInt("Enter > ");
        if (!first && n <= previousNumber) break;
        first = false;
        total += n;
        count++;
        previousNumber = n;
    }
    println("You have entered " + count + " numbers in increasing order.");
    println("Sum of these " + count + " numbers is " + total + ".");        
}
}

答案 2 :(得分:0)

你写过:

int previousNumber = 0;

你不能输入负数的原因是因为程序假定计算中没有包含的第一个值是0:如果输入的程序少于程序退出。

有两种方法可以解决这个问题。您可以为previousNumber设置较小的初始值,以便允许一些负数。例如,如果将其设置为-1000,则用户可以输入-999或更高的值。你应该使用什么价值?好吧,我们知道所有int值都大于或等于Integer.MIN_VALUE,所以你可以使用它。

然后用户恰好输入-2147483648并被拒绝。为什么?因为它恰好是Integer.MIN_VALUE。所以这不是一个好的解决方案。

用户输入的第一个数字需要特殊处理,因为它无法与之前的输入进行比较。因此,一种解决方案是在循环之外单独读取第一个数字:

int previousNumber = readInt("Enter > ");

int total = previousNumber;

int count = 1;

while(true) {
    int n = readInt("Enter > ");
    if (n <= previousNumber) break;

    total += n;
    count++;
    previousNumber = n;
}

另一个解决方案是维护一个标志变量,告诉你用户是否已经给出了第一个输入:

boolean isFirst = true;
while(true) {
    int n = readInt("Enter > ");
    if (!isFirst && n <= previousNumber) break;

    total += n;
    count++;
    previousNumber = n;
    isFirst = false;
}

您应该使用哪种款式取决于您的口味。