我知道java中没有goto
,但是我问一般来说,如果有goto
的方法,则if if else
例如:
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
}
但没有奏效,也没有使用break标签。我明白继续,休息。是否在儿子和父母之间使用? :
label:
for(int i=0 ; i<n ; i++)
if (cond) break label;
我问一个方法可以从if跳到其他(2个儿子)
(不是儿子和父母,而是在2个儿子之间跳跃)
我认为即使在c和c ++ 4示例中使用goto
,我们也无法做到这一点
答案 0 :(得分:1)
任何使用“goto like”行为的东西都是个坏主意。人们普遍认为,与坚持“结构化编程”控制结构相比,类似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 - 将重构代码转换为methid
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 "";
}
在这种情况下,第一种方法提供了更好的代码。 (IMO)
答案 1 :(得分:0)
Java没有goto
。但是,如果我理解你,你可以使用switch
,默认行为是 fall-through ,所以像
int number;
for(int i=0 ; i<decimal.length() ; i++ )
{
Character c = decimal.charAt(i);
switch (c) {
default: // <-- c is not ' '
nb += decimal.charAt(i);
if (i != decimal.length() - 1) {
break;
}
// i == decimal.length() - 1, fall-through
case ' ': // <-- c is ' ', or it fell through
number = Integer.parseInt(nb);
System.out.print( (char) number + " ");
nb = "";
number = 0;
}
}
答案 2 :(得分:0)
我认为你没有正确地认为这一点。 if-else语句的设计方式使您无法从if
分支跳转到else
分支。 if语句的重点是要明确&#34;如果这是真的,那就这样做,否则就这样做。&#34;试图通过使用肮脏的技巧来违反这一点只会导致维护问题。您的代码将变得非常难以理解。
为什么不找一个解决方法,而不是考虑如何打破if语句?你在这里做的只是读取由空格分隔的整数。如果你正在做什么,为什么不在循环之前在字符串的末尾添加' '
字符?这将与条件i == decimal.length() - 1
decimal += " ";
String nb = "";
int number;
for (int i = 0; i < decimal.length(); i++) {
...
或者您可以使用Scanner
:
Scanner s = new Scanner(decimal);
while (s.hasNextInt())
System.out.print(((char)s.nextInt()) + " ");