-1

只要用户输入的数字大于前一个数字,我就希望从 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 + ".");        
}

}

4

3 回答 3

2

使用Integer.MIN_VALUE而不是0用于previousNumber初始化。然后应该适用于负数。

于 2013-11-09T09:54:09.770 回答
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 + ".");        
}
}
于 2013-11-09T09:56:03.100 回答
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;
}

你应该使用哪种风格取决于你的口味。

于 2013-11-09T10:06:09.463 回答