-1

嗨,我正在尝试编写一个 java 程序,它接受来自用户的尽可能多的输入,并在不使用数组的情况下输出最大值、最小值和平均值。

  • **这是指令:

编写一个程序 LoopStatistics,它读取控制台上的值,然后输出输入的一组数字的一些统计量。如果没有输入正数,则程序不打印输入的数字。分配 用户可以根据需要在控制台上输入任意数量的正浮点数。零(或负数)表示输入结束(不能输入更多数字)。输入后程序显示  输入的最小数字 (min)  输入的最大数字 (max)  所有输入数字的平均值 (mean)**

public class LoopStatistics {

    public static void main(String[] args) {
        char ch;
        int n=0;
        TextIO.putln("enter numbers:");
        for (ch = 'a'; ch <= 'z'; ch++){
            n = ch;
            n =TextIO.getInt();
            while (n>0){
                ch++;
            }
            break;
        }
        TextIO.put(n);
    }
}
4

3 回答 3

1

不要存储所有用户条目,只需保留最小、最大、运行总数和条目数。

于 2013-09-21T12:39:01.793 回答
0

让我们在这里分析您的代码:

    for (ch = 'a'; ch <= 'z'; ch++){

        n = ch;                // the value of n is now equal to the value of ch
        n =TextIO.getInt();    // now the value of n is changed to the value received by the TextIO.getInt()
        while (n>0){           
            ch++;
        }
        break;                // your loop stops here in it's first iteration
    }
    TextIO.put(n);            

这里有一个简单的问题,这段代码中的变量“ch”有什么用!?

现在,如果您只想检查用户输入是否小于或等于零,为什么不在循环中使用简单的 if 语句,如果为真,则中断,否则继续!?

于 2013-09-21T12:46:38.510 回答
0

编辑

现在你的问题是你设置了一堆你不需要的变量。老实说,您的问题不是编程问题,而是基本逻辑问题。

您不能将“最低”检查与“最大”检查结合起来。相反,您想要类似的东西

int numbersEntered = 0;
double minimumNumber = 0;
double maximumNumber = 0;

while(userIsEnteringNumbers) {
    if(numberEntered < minimumNumber) {
        minimumNumber = numberEntered;
    }

    if(numberEntered > maximumNumber) {
        maximumNumber = numberEntered;
    }

    ++numbersEntered;
}

这里有一些没有意义的东西,但我假设通过“不使用数组”这包括像 Sets 这样的东西

在这种情况下,您不想存储用户输入,只存储最小值、最大值和用户输入的值的数量。在用户完成输入值后计算平均值。

就您的循环而言,您希望循环用户选择的多次(在这种情况下,在循环之前获取此信息,然后用它初始化您的 for 循环),或者您希望无限循环直到用户输入特定值(例如一个新行或任何不是数字的东西)。

现在谈谈您提交的代码中的问题..

for (ch = 'a'; ch <= 'z'; ch++)

你为什么用字母来循环?您似乎没有使用任何需要字母的东西,所以只需使用数字来保持简单。您可以在 for 循环中初始化变量,例如

for (int i = 0; i < 10; ++i)

尽量避免重复使用变量,这会使你的代码难以阅读。

n = ch;
n =TextIO.getInt();

您为 n 分配 ch 的值,然后立即为其分配 TextIO.getInt() 的值。语句'n = ch' 也可能不存在。如果您想对其执行某种操作,请使用+=、-=、*=/=

while (n>0){
        ch++;
    }

这本质上是一个无限循环或一个永远不会到达的循环,具体取决于 n 的值。您要增加的唯一变量是 ch,这意味着 n 将始终大于 0,并且您的代码将永远不会进一步

尝试实施我在回答开始时建议的解决方案,如果您仍然卡住,请回复

于 2013-09-21T12:48:52.700 回答