如何在Java中实现以下循环

如何在Java中实现以下循环,java,Java,我是一名自学Java的noob程序员,在其中一个练习中遇到了以下问题: //要求用户输入任意数量的数字。然后计算这些数字的平均值 谁能告诉我该怎么做?到目前为止,我认为最好的方法是让用户输入一些命令以退出循环。但是我如何存储输入呢 谢谢你的时间和帮助 您应该使用数组列表 调用add()方法向其添加数字。是的,您需要用户输入一些东西来中断循环。例如: ArrayList<Integer> list = new ArrayList<Integer>(); Scanner in

我是一名自学Java的noob程序员,在其中一个练习中遇到了以下问题:

//要求用户输入任意数量的数字。然后计算这些数字的平均值

谁能告诉我该怎么做?到目前为止,我认为最好的方法是让用户输入一些命令以退出循环。但是我如何存储输入呢


谢谢你的时间和帮助

您应该使用
数组列表


调用
add()
方法向其添加数字。

是的,您需要用户输入一些东西来中断循环。例如:

ArrayList<Integer> list = new ArrayList<Integer>();
Scanner input = new Scanner(System.in);

while(true)
{
    int num = input.nextInt();

    if(num == -1)
       break;

    list.add(num); // add number entered to list
}
while (true) {
  num = readInteger();
  n++; 
  average = average / n * (n-1) + num / n;
}
ArrayList list=new ArrayList();
扫描仪输入=新扫描仪(System.in);
while(true)
{
int num=input.nextInt();
如果(num==-1)
打破
list.add(num);//将输入的编号添加到列表中
}
上面使用Scanner类和ArrayList类

或者,您可以:

ArrayList<Integer> list = new ArrayList<Integer>();
Scanner input = new Scanner(System.in);

while(true)
{
    int num = input.next();

    if(num.equals("exit"))
       break;

    list.add(Integer.parseInt(num)); // convert String to Integer and add number entered to list
}
ArrayList list=new ArrayList();
扫描仪输入=新扫描仪(System.in);
while(true)
{
int num=input.next();
如果(num.equals(“exit”))
打破
list.add(Integer.parseInt(num));//将字符串转换为整数并将输入的数字添加到列表中
}
这使用字符串而不是整数,如果可以接受任何数字,则可能更有用,因此不能使用它来中断循环。

使用
while(true){}
循环输入数字。当用户输入最终数字时(例如,他输入一个字母),使用
break
退出循环

编辑:不需要存储所有输入的数字。只需将它们全部添加到一个整数,并将loopcount存储在另一个整数中。循环结束后,执行
result=total/loops

int total = 0, loops = 0, result;
while (true) {
    String tmp = getInput();
    if (tmp.equals("q")) {
        break;
    }
    total += Integer.parseInt(tmp);
    loops++;
}
result = total / loops;

您还可以向用户询问循环之前的元素数(n)。初始化该大小(n)的数组,并使用从0到n的for来输入数字并将其保存到数组中。通过这种方式,您不必等待“退出”命令,尽管您无法输入比以前指定的数字更多的数字。

您不必将整数存储在某个位置:您只需保留迄今为止看到的整数和看到的整数数量,然后返回两个数字之间的分数

如果仍然要存储它们,请使用要使用的列表接口的任何实现

当然,您必须注意两种解决方案上可能的整数溢出。 使用“先存储所有整数,然后计算平均值”更容易(您可以在数组上循环,将元素/大小求和到计算的平均值),但即使使用另一种方法,您也可以处理它;例如:

ArrayList<Integer> list = new ArrayList<Integer>();
Scanner input = new Scanner(System.in);

while(true)
{
    int num = input.nextInt();

    if(num == -1)
       break;

    list.add(num); // add number entered to list
}
while (true) {
  num = readInteger();
  n++; 
  average = average / n * (n-1) + num / n;
}

虽然您可以使用整数数组列表:
ArrayList
,但对于这个简短的问题来说,这太过分了

理想情况下,您可以跟踪2个
int
,一个包含条目数,另一个包含总数

int counter = 0;
int sum = 0;
当用户输入新号码时,只需执行以下操作:

counter++;
sum = sum + [the number entered]
当用户输入完数字后,返回

sum / counter;
一个空的输入可能会发出数字提交结束的信号。因此,在循环时,检查字符串输入是否为null或空:

if(input == null || input.equals("")){
    // finish up and break out of the loop
}

实际上,您甚至不需要单独存储这些数字

首先让您的用户知道,输入一个空行将表示输入结束

然后使用一个名为
long total
(或BigInteger)的变量,继续运行该变量中的数字总数,并将变量
count
中输入的数字计数作为计数器

读取完所有输入后,只需将平均值输出为
total/count
,其中
count
是用户输入的数字总数


您可以使用从输入中读取数字。

如果以后需要这些数字,请按照SLaks的建议将它们存储在ArrayList中。您可以找到ArrayList的官方文档

但是,如果您只需要求和,那么只需在用户输入数字时跟踪“运行总和”。显然,用户需要向程序发送某种消息,以表明他/她已完成输入(另一种方法是询问用户将要预先输入多少个数字)


在存储方面,您可以使用ArrayList或任何其他集合,因为mean不关心顺序。结束输入的命令可以。祝你好运(希望你是十几岁的孩子)@bestsss谢谢ArrayList的提示,有些人在他们的回答中也提到了这一点,而我对数组一无所知(我还没读到书的这一部分)。是的,我才十几岁,所以我还有足够的时间学习(并建立下一个“脸谱网”,呵呵)。谷歌在下一个脸谱网上打败了你,快点:)嗯,我比你大得多,我从6岁开始,有一个梦想很好,但我建议你不要想你会管理多么庞大的项目,相反,要专注于你最喜欢的(我知道是女孩…)如果你有大量的整数怎么办?你会很容易溢出的。他说会手动输入。计数器溢出需要相当长的时间。在添加每个新数字之前,总和可以检查。更容易的方法是使用一个双精度计数器来存储到目前为止的
平均值
,然后存储看到的整数数。然后,当有一个新的整数时,执行以下操作:
n++
<代码>平均值=平均值/n*(n-1)+数字/n。不知道这种方法的数值稳定性:)这种方法的任何溢出问题都至少和不必要地创建容器的方法一样糟糕,甚至更糟。如果有太多的数字,这些方法也有内存不足的风险。这并不是一个简单的例子,hintI只是展示了可能的方法。如果他是编程新手,我发现他们经常需要