簡體   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