繁体   English   中英

JAVA:for循环内的if语句并从for循环退出

[英]JAVA: if statement inside a for loop and exiting from a for loop

大家好,我是新来的。 我正在为编组做作业,所以请耐心等待。

因此,我要做的是编写一个可以输入人们年龄的代码,范围是1到120之间的整数。 然后,用户必须计算平均年龄,并且应将其计算为实数。 但是用户必须输入年龄值,直到用户输入0,这将停止程序然后输出平均值。 如果用户输入的年龄无效,则程序应继续提示用户,直到他们输入有效年龄为止。

所以我尽了我的本分。 我创建了一个代码,然后我想到了:

public static void main(String[] args)
{

   int ageValue = 0;
   double getAge;
   getAge = inputAge();
   System.out.println("Average age is: " + getAge);
}

public static double inputAge()
{
    int ageValue = 0;
    double avgAge = 0;
    Scanner sc = new Scanner(System.in);
    for (int i = 1; i <= 120; i++)
    {
        System.out.println("Enter age");
        ageValue += sc.nextInt();

        avgAge = ageValue / (double) i;
        if (ageValue == 0)
        {
            System.out.println("Average age is: " + avgAge);
            System.exit(0);
        } 
        while (ageValue < 0 || ageValue > 120)
        {
            System.out.println("Invalid input. Try again!");
            ageValue = sc.nextInt();
        }

    }

    return avgAge;
} 

现在我放下代码,以某种方式得到平均公式。 现在的问题是,当我按0时,它不会提示“ if”语句。 但是,当出现第一个“输入您的年龄”提示并按0时,“ if”语句起作用。 但是对于每次迭代,该程序都不允许我执行该语句。

另一方面,我也很努力地找出如何不使用break或System.exit()退出循环,因为那样会给我零分。 我想要的是当我按0时,它应该退出循环并输出平均值,如任务所述。

我不知道你们能不能得到..代码正确吗? 我在正确的轨道上吗? 我想念什么吗???

干杯

您可以考虑使用do while循环方法。 这将使您的代码自然运行一次,并在用户输入0退出:

int ageValue = 0, numOfAges = 0, sumOfAges = 0;
do {
    System.out.println("Enter age");
    ageValue = sc.nextInt();
    if (ageValue < 0 || ageValue > 120)
        System.out.println("Bad value... try again");
    else if (ageValue != 0) {
        sumOfAges += ageValue;
        numOfAges++;
    }
} while (ageValue != 0);
return ((double)sumOfAges / numOfAges);

另一方面,我也很努力地找出如何不使用break或System.exit()退出循环,因为那样会给我零分。

你可以在for循环中有另一个条件,像这样

boolean finished = false;
for (int i = 1; i <= 120 && finished == false; i++)

并更换

System.exit(0)

finished = true;

但是,我会问为什么使用“ break”会给您零分。 这正是这种情况的预期目的。

您可以尝试这种方法。

我已经对退出条件和平均方式做了一些修正。

您在代码中显示的“ for”循环将样本数限制为120,但是问题没有这么说,因此我可以自由地将您的问题归纳为任意样本数以求平均值。

第一件事是您应该查找“ if-else”条件结构,因为这是代码中缺少的要点。

https://zh.wikipedia.org/wiki/条件_(计算机编程)

您可以认为问题的表达方式为:

  1. 计算意甲的平均值
  2. 串行输入键盘
  3. 输入零时,退出循环并返回当前平均值
  4. 当输入任何超出范围[0,120]的值时,给出一条消息并继续循环,而无需更改任何意向
  5. 当输入边界[1,119]内的任何值时,将该值添加到意甲并重新计算平均值

     import java.util.ArrayList; import java.util.List; import java.util.Scanner; public class Test { public static void main(String[] args) { System.out.println("Final Average age is: "+inputAge()); } private static double inputAge() { int ageValue=0; double avgAge=0; boolean shouldExit=false; Scanner sc=new Scanner(System.in); List<Integer> samples=new ArrayList<Integer>(); // loop until flag is true while(!shouldExit) { System.out.println("Enter age"); ageValue=sc.nextInt(); if(ageValue==0) { shouldExit=true; } else if(ageValue<0||ageValue>120) { System.out.println("Invalid input. Try again!"); } else { // add current input in the samples and calculate average over all the samples samples.add(ageValue); avgAge=getAvg(samples); System.out.println("Current Average age is: "+avgAge); } } sc.close(); return avgAge; } private static double getAvg(List<Integer> samples) { double avgAge=0; for(Integer tmp:samples) { avgAge+=tmp; } return avgAge/(double) samples.size(); } } 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM