亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何在Java中使用'goto'的替代方法

如何在Java中使用'goto'的替代方法

回首憶惘然 2023-05-17 15:52:36
我怎樣才能在 Java 中使用任何替代“goto”的方法?我嘗試使用中斷標簽。但是由于我沒有跳出任何循環,所以它給出了未定義的標簽錯誤。import java.io.*;class $08_02_Total_Avg_Marks{    public static void main(String args[]) throws IOException    {        //declare and initialize variables        int subNo = 0, totalMarks = 0;        float avg = 0.0F;    BufferedReader br = new BufferedReader(new InputStreamReader(System.in));   label1:    System.out.println("Enter no. of subjects");    //check if input is integer    try    {        subNo = Integer.parseInt(br.readLine().trim());    }    catch(NumberFormatException e)    {        System.out.println("Please enter a whole number.");        //goto label1    }    int[] marksArray = new int[subNo];    for(int i=0; i<marksArray.length; i++)    {label2:        System.out.println("Enter marks for subject " + (i+1));        try        {            marksArray[i] = Integer.parseInt(br.readLine().trim());        }        catch(NumberFormatException e)        {            System.out.println("Please enter a whole number.");            //goto label2        }    }}}我正在終止無效輸入的程序。但是我需要在無效輸入上執行相同的行。
查看完整描述

4 回答

?
斯蒂芬大帝

TA貢獻1827條經驗 獲得超8個贊

與其明確地轉到特定點,不如將您可能想要在循環中重復的位包裝起來。如果您不想再次執行循環,break.


對于第一個:


while (true) {

  System.out.println("Enter no. of subjects");


  //check if input is integer

  try

  {

      subNo = Integer.parseInt(br.readLine().trim());

      break;

  }

  catch(NumberFormatException e)

  {

    System.out.println("Please enter a whole number.");

    // Nothing required to continue loop.

  }

}

對于第二個,將循環體包裹在循環中:


for(int i=0; i<marksArray.length; i++)

{

  while (true) {

    System.out.println("Enter marks for subject " + (i+1));

    try

    {

        marksArray[i] = Integer.parseInt(br.readLine().trim());

        break;

    }

    catch(NumberFormatException e)

    {

        System.out.println("Please enter a whole number.");

    }

  }

}

或者,寫一個包裝這個循環的方法可能更好:


int getInt(BufferedReader br) throws IOException {

  while (true) {

    try

    {

      return Integer.parseInt(br.readLine().trim());

    } catch(NumberFormatException e) {

      System.out.println("Please enter a whole number.");

    }

  }

}

然后調用此方法:


System.out.println("Enter no. of subjects");

int subNo = getInt(br);


for(int i=0; i<marksArray.length; i++) {

    System.out.println("Enter marks for subject " + (i+1));

    marksArray[i] = getInt(br);

}


查看完整回答
反對 回復 2023-05-17
?
慕碼人2483693

TA貢獻1860條經驗 獲得超9個贊

我已經稍微重新格式化了您的代碼。我的基本想法是:所有的 goto 語句都可以寫成等價的循環。第一個現在是用一個 while 循環制作的,它終止了一個沒有例外。至于第二個標簽,它是用相同的機制完成的(所以是一個 while 循環),但是,標簽可以用“break + nameOfYourLable” - 語句退出/終止。


import java.io.*;


class $08_02_Total_Avg_Marks

{

public static void main(String args[]) throws IOException

{

    //declare and initialize variables

    int subNo = 0, totalMarks = 0;

    float avg = 0.0F;



BufferedReader br = new BufferedReader(new InputStreamReader(System.in));   

boolean goToLabel1 = true;

while (goToLabel1) {

System.out.println("Enter no. of subjects");


//check if input is integer

try

{

    subNo = Integer.parseInt(br.readLine().trim());

    goToLabel1 = false;  //parsing succeeded, no need to jump to label1

}

catch(NumberFormatException e)

{

    System.out.println("Please enter a whole number.");

    //goto label1

}

}

int[] marksArray = new int[subNo];


for(int i=0; i<marksArray.length; i++)

{

    label2: while (true) {

    System.out.println("Enter marks for subject " + (i+1));

    try

    {

        marksArray[i] = Integer.parseInt(br.readLine().trim());

        break label2;

    }

    catch(NumberFormatException e)

    {

        System.out.println("Please enter a whole number.");

    }

}

}


}

}


查看完整回答
反對 回復 2023-05-17
?
搖曳的薔薇

TA貢獻1793條經驗 獲得超6個贊

此代碼片段將循環直到插入正確的數字,在本例中(它解決了您的第一個 goto 問題)


BufferedReader br = new BufferedReader(new InputStreamReader(System.in));  

boolean noNumberEntered; //Default on false


System.out.println("Enter no. of subjects");


//TODO: check if input is integer


while(!noNumberEntered){

    try

    {

        subNo = Integer.parseInt(br.readLine().trim());

        noNumberEntered = true;


    }

    catch(NumberFormatException e)

    {

        System.out.println("Please enter a whole number.");

    }

}


查看完整回答
反對 回復 2023-05-17
?
翻閱古今

TA貢獻1780條經驗 獲得超5個贊

您可以改用do while循環和布爾值,如下所示:


class $08_02_Total_Avg_Marks

{

    public static void main(String args[]) throws IOException

    {

        //declare and initialize variables

        int subNo = 0, totalMarks = 0;

        float avg = 0.0F;



    BufferedReader br = new BufferedReader(new InputStreamReader(System.in));  

    boolean goodEntry = true; 

    do {

        goodEntry = true;

        System.out.println("Enter no. of subjects");


        //check if input is integer

        try

        {

            subNo = Integer.parseInt(br.readLine().trim());

        }

        catch(NumberFormatException e)

        {

            System.out.println("Please enter a whole number.");

            goodEntry = false;

        }

    } while(!goodEntry);

}

你可以對你的第二個做同樣的事情goto。有很多方法可以做到這一點(使用while循環和布爾值,使用breaks...),但循環比goto.


查看完整回答
反對 回復 2023-05-17
  • 4 回答
  • 0 關注
  • 243 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號