简体   繁体   中英

JAVA: if statement inside a for loop and exiting from a for loop

Good day guys, I am new in this. I am doing an assignment for my prog unit, so please bear with me.

So what I have to do is to write up a code that can input people's ages, from integers between 1 to 120 inclusive. The user then have to calculate the average age, and should be calculated as a real number. But the user has to input age values until the user enters 0, which is to stop the program then output the average. If the user enters an age that is invalid, then the program should continue to re-prompt the user until they enter a valid age.

So I did my part. I created a code and I come up with this:

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;
} 

Now I laid down my code and I got my average formula somehow working. Now, the problem is that when I press 0, it doesn't prompt the "if" statement. However, when the first "Enter your age" prompt comes up and I pressed 0, the "if" statement worked. But for each iteration, the program won't let me execute the statement.

On the other hand, I am also struggling to figure out how to exit a loop without using break or System.exit() because that will give me zero marks. What I wanted is when I press 0, it should exit the loop and output the average, like what the task said.

I don't know if you guys can get it.. Is the code right? Am I on the right track? Am I missing something???

Cheers

You could consider a do while loop approach. This would allow your code to naturally run once, and exit once the user enters 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);

On the other hand, I am also struggling to figure out how to exit a loop without using break or System.exit() because that will give me zero marks.

You can have another condition in your for loop like this

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

and replace

System.exit(0)

with

finished = true;

However, I would question why using "break" will score you zero marks. This is exactly the sort of scenario break was intended for.

you can try this approach.

i've corrected a bit the exit condition and the way averaging is done.

the "for" loop you show in your code is limiting the number of sample to 120, but the question don't say so, so i took the liberty to generalise you question to any number of sample to average.

first thing is you should look up "if-else" conditionnal structure, as that was the main point missing in your code.

https://en.wikipedia.org/wiki/Conditional_(computer_programming)

you can think the way the problem is expressed as :

  1. calculate the average in a serie
  2. the serie is keyboard inputted
  3. when zero is inputted, exit the loop and return the current average
  4. when any value out of bound [0,120] is inputted, give a message and continue the loop without changing anything to the serie
  5. when any value inside the bound [1,119] is inputted add the value to the serie and recalculate the average

     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(); } } 

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

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