关于c ++:Java中有没有goto语句?

Is there any goto statement in Java?

本问题已经有最佳答案,请猛点这里访问。

我用C++编写了一些GOTO语句的程序。现在,我需要用Java编写相同的程序。Java中有GOTO选项吗?如果是,如何实现?它和C++是一样的吗?

我的程序是:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
#include<stdio.h>
#include<conio.h>

void main()
{
    int i,j,k,w,l,q,d;
    clrscr();
    printf("
Enter the limit:"
);
    scanf("%d",&k);
    for(i = 13; i <= k ; i++)
    {
        repeat:
        j = i%10;
        if (j != 0)
        {
            if(i < 99)
            {
                for(w = 1; w <= 9; w++)
                {
                    l = 11*w;
                    if (l == i){
                        i++;
                        goto repeat;
                    }
                }
            }
            if(i > 99)
            {
                for(q = 1; q<=9 ; q++)
                {
                    d = 111*q;
                    if (d == i){
                        i++;
                        goto repeat;
                    }
                }
            }
            printf("%d,",i);
        }
    }
    getch();
}


不,Java没有按设计的EDCOX1×0运算符。它被认为是有害的。

如果将repeat:标签放在for循环之前,则可以使用continue repeat代替goto repeat重写代码。

例如。

1
repeat: for(i=13;i<=k;i++)

然后

1
continue repeat;

而不是goto repeat


没有Java在活动状态(但在保留状态)中没有EDCOX1×0。现在不能在程序中使用它(它是保留关键字)。

并且避免在C++中使用它。对于这两种语言,您可以使用智能放置的continue和/或break编写程序。


有时我会宽恕使用goto。这不是那种情况。这个特殊的问题不需要任何goto就可以解决(break和continue是goto,只是一种受限形式)。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#include <iostream>

int main()
{
    unsigned int lim;
    std::cout <<"Enter the limit:";
    std::cin >> lim;
    std::cout <<"
"
;

    if (lim > 999) {
        std::cout << lim <<" is too large. Truncating to 999.
"
;
        lim = 999;
    }

    // Why start at 13? Oh well.
    for (unsigned int ii=13; ii <= lim; ii++) {
        if (((ii % 10) != 0) &&
            ((ii < 100) ? (ii % 11) != 0 : (ii % 111 != 0))) {
            std::cout << ii <<",";
        }
    }
    std::cout <<"
"
;
    return 0;
}

有时写代码块最清晰的方法是中断或继续。有时,编写代码块的最清晰方法涉及多级中断或继续。虽然Java确实提供了这样的机制,但是C和C++都不这样做。

正如我刚开始时所说,有时我会宽恕使用goto。这种情况非常非常罕见:

  • 要模拟多级中断,或者在这是编写代码最清晰的方式时继续。
  • 在一个愚蠢的编程环境中处理错误,这个环境要求输入单点,返回单点。
  • 在编程环境中处理导致尝试、捕获和抛出禁止的关键字的错误。
  • 实现有限状态机(但在这种情况下,围绕开关的循环通常非常好)。


I wrote a program in C++ with some goto statements.

不,你没有。C++要求EDCOX1〔8〕返回EDCOX1〔9〕,EDCOX1〔10〕是C库(EDCOX1,11)是平台特定的C库。在C++中,我们拼写它为EDOCX1,12,无论如何我们通常不使用它(因为EDCOX1,13)更强大,类型安全。但是,您的程序是有效的C。

Now,i need it to write the same program in java.

天哪,为什么?在某种程度上,我可以弄清楚你的程序实际上打算做什么,它根本没有任何用处。如果这是做家庭作业的话,你的老师在解释好的编码风格方面做得非常糟糕,从我看来。

Is there any goto option in java ?

不,在Java中没有实现EDCOX1 0Ω。他们这么做是因为你没有理由使用它。不,真的。Linux内核上到处都是,这并不意味着你有理由。(这也不意味着他们有真正的理由。)

可以更简单地编写程序,例如:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#include<stdio.h>  
#include<conio.h>  
void main()  
{  
    int i,j,k,w,l,q,d;  
    clrscr();  
    printf("
Enter the limit:"
);  
    scanf("%d",&k);  
    for(i=13;i<=k;i++)  
    {  
        j=i%10;  
        if (j == 0) continue;
        if (i<99)  
        {  
            for(w=1;w<=9;w++)  
            {  
                l=11*w;  
                if (l==i) continue;
            }  
        }
        else
        {  
            for(q=1;q<=9;q++)  
            {  
                d=111*q;  
                if(d==i) continue;
            }  
        }  
        printf("%d,",i);  
    }  
    getch();  
}

同样的基本方法也适用于爪哇。

尽管你真的需要处理一些其他风格的问题。请尝试使用实数变数名称,并限制变数范围。


虽然GOTO是Java中的保留字,但它并不在Java语言中使用。但是有一个标签,一个可以与中断或继续一起使用的标识符。标签的目的是让一个迭代跳出迭代,这有点像goto语句。

代码:

1
2
3
4
labelA:
// some loop {
    continue labelA;
}


简短的回答,不。

你也可以参考这个问题


你可以用标签做任何你可以用goto做的事情。作为反模式的标签,这并不是一个好主意。

您在这里要做的不需要嵌套循环,这样就完全不需要使用标签。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Scanner in = new Scanner(System.in);
System.out.print("
Enter the limit:"
);
int limit = in.nextInt();
for (int i = 12; i <= limit; i++) {
    if (i % 10 == 0) continue;
    if (i <= 99) {
        // two digits the same.
        if (i % 10 == i / 10 % 10) continue;
    } else if (i <= 999) {
        // three digits the same.
        if (i % 10 == i / 10 % 10 && i % 10 == i / 100) continue;
    } else {
        System.err.println("Value" + i +" too large to check");
        break;
    }
    System.out.printf("%d,", i);
}