首页 > 解决方案 > 如何在 Java 中使用“goto”的替代方法

问题描述

如何在 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
        }
    }

}
}

我在无效输入时终止程序。但我需要对无效输入执行相同的行。

标签: java

解决方案


与其想明确地转到特定点,不如将您可能想要重复的位包装在一个循环中。如果您不想再次执行循环,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);
}

推荐阅读