gpt4 book ai didi

java - 使用 'goto' 从 if 移动到 else

转载 作者:行者123 更新时间:2023-11-30 06:49:05 25 4
gpt4 key购买 nike

我知道java中没有goto,但我一般会问是否有一个从if到else的goto方法示例:

public void decToAsci(String decimal) {
String nb = "";
int number;
for (int i = 0; i < decimal.length(); i++) {
Character c = decimal.charAt(i);
if (!c.equals(' ')) {
nb += decimal.charAt(i);
if (i == decimal.length() - 1)
//here i want to jump to else
// i can do it like this :
// System.out.print( (char) Integer.parseInt(nb) + " ");
// but i repeat code in else here ..i just want to jump to else
} else {
number = Integer.parseInt(nb);
System.out.print((char) number + " ");
nb = "";
number = 0;
}
}
}

我试试这个:

if (!c.equals(' ')) {
nb += decimal.charAt(i);
if (i == decimal.length() - 1) continue label;
} else {
label: the code in else
}

但没有工作,也没有使用中断标签。我明白,继续,中断。儿子和 parent 之间都这样用吗? :

label:
for(int i=0 ; i<n ; i++)
if (cond) break label;

我问一个可以从if跳转到else的方法(2个儿子)

(不是儿子和 parent ,而是在两个儿子之间跳跃)

我认为即使在 c 和 c++ 4 示例上使用 goto 我们也做不到

最佳答案

任何使用“类似 goto”行为的行为都是一个坏主意。人们普遍认为,与坚持“结构化编程”控制结构相比,类似 goto 的控制结构会导致代码更难以阅读/维护。

以下是(IMO)解决问题的两种“正确方法”:

方法#1 - 重新安排逻辑

public void decToAsci(String decimal) {
String nb = "";
for (int i = 0; i < decimal.length(); i++) {
Character c = decimal.charAt(i);
if (!c.equals(' ')) {
nb += decimal.charAt(i);
}
if (c.equals(' ') || i == decimal.length() - 1) {
int number = Integer.parseInt(nb);
System.out.print((char) number + " ");
nb = "";
}
}
}

(如果 c.equals(' ') 很昂贵,您可以使用临时变量来避免重新计算它。在这种情况下,它很便宜,并且可能会被内联并进一步优化JIT 编译器。)

方法#2 - 将代码重构为方法

public void decToAsci(String decimal) {
String nb = "";
for (int i = 0; i < decimal.length(); i++) {
Character c = decimal.charAt(i);
if (!c.equals(' ')) {
nb += decimal.charAt(i);
if (i == decimal.length() - 1)
nb = processAsInt(nb);
} else {
nb = processAsInt(nb);
}
}
}

public String processInt(String nb) {
int number = Integer.parseInt(nb);
System.out.print((char) number + " ");
return "";
}

在这种情况下,第一种方法提供了更好的代码。 (国际海事组织)

关于java - 使用 'goto' 从 if 移动到 else,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43158268/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com