首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >arrays程序

arrays程序
EN

Stack Overflow用户
提问于 2012-12-02 15:25:16
回答 3查看 95关注 0票数 2

谁能帮帮我。我在修复代码的逻辑上遇到了困难。这个程序应该计算用户输入的数字的平均值,假设数组的大小设置为100,如果用户输入-99,程序将终止。我知道问题出在while循环处理中

代码语言:javascript
复制
    Scanner input = new Scanner(System.in);

    int[] num = new int[100];

    int ctr=0, sum=0, ave = 0;

    while(num[ctr]!= -99)
    {
        System.out.print("Enter number: ");
        num[ctr]= input.nextInt();

        sum += num[ctr];

        ctr++;

    }

    System.out.print("Numbers are " );

    for(int x = 0; x<ctr; x++)
    {
        System.out.print(num[x] + " ");
    }

    ave = sum / (ctr-1);
    System.out.println("Average is " + ave);

    }

}
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-12-02 15:33:43

您应该在while while循环之外读取第一个输入。因为当用户进入-99时,在循环中您会递增ctr,因此检查的号码将是错误的。所以实际上你永远不会检查你想要检查的当前号码。

代码语言:javascript
复制
int ctr=0, sum=0, ave = 0;
System.out.print("Enter number: ");
num[ctr]= input.nextInt();
while(num[ctr]!= -99)
{
   sum += num[ctr];
   ctr++;
   System.out.print("Enter number: ");
   num[ctr]= input.nextInt();
}

但您需要处理用户只输入一个数字的情况,在这种情况下,您将除以零,并且您将得到错误的平均值。您还应执行以下操作:

代码语言:javascript
复制
ave = sum / (ctr);

而不是:

代码语言:javascript
复制
ave = sum / (ctr-1);

现在你会得到很好的结果。

票数 0
EN

Stack Overflow用户

发布于 2012-12-02 15:27:59

当数组被填充时,您的while循环没有终止条件。(如果输入了100个整数,且ctr等于100。)

票数 0
EN

Stack Overflow用户

发布于 2012-12-02 15:31:52

while循环的问题在于,它从不查看刚刚包含的元素;它总是查看紧随其后的元素。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13667276

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档