java - 如何在 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
}
}
}
}
我在无效输入时终止程序。但我需要对无效输入执行相同的行。
解决方案
与其想明确地转到特定点,不如将您可能想要重复的位包装在一个循环中。如果您不想再次执行循环,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);
}
推荐阅读
- javascript - 如何在 vue.js 中将数组长度传递给另一个组件(从子组件到父组件)?
- mysql - 无法在 Fedora 上安装 MYSQL - repo.mysql.com 上的 Curl 错误 TIMEOUT
- javascript - 如何在提交ajax时显示警报消息?
- python - lldb python API FindFirstType("typename" 返回无
- javascript - 如何正确导入 Three.js OutlinePass jsm?
- powerbi - 计算每月注册和完成的学生人数
- wordpress - wordpress 小部件属性的问题
- docker - Docker Windows 客户端无法启动且系统托盘中没有图标
- java - localhost:8080,在 Spring Boot 应用程序中显示 404 错误
- javascript - JavaScript 替换在控制台中有效,但在网站上无效