如何正确使用goto语句

我正在参加我的高中AP计算机科学课。

我决定向我们的一个实验室扔一个goto声明来玩,但是我得到了这个错误。

Exception in thread "main" java.lang.Error: Unresolved compilation problems: 
    Syntax error on token "goto", assert expected
    restart cannot be resolved to a variable
at Chapter_3.Lab03_Chapter3.Factorial.main(Factorial.java:28)

我在Stackoverflow上找到了一个goto问题,以了解如何正确地做到这一点,并且我完全按照其中一个答案中的说明进行了操作。 我真的不明白为什么编译器需要assert语句(至少这是我想要的),也不知道如何使用assert 。 它似乎想要goto restart;的重启部分goto restart; 作为一个变量,但重启只是一个标签,将程序拉回到第10行,以便用户可以输入有效的int 。 如果它想重新启动成为一个变量,我该怎么做?

import java.util.*;

public class Factorial 
{
    public static void main(String[] args) 
    {
        int x = 1;
        int factValue = 1;
        Scanner userInput = new Scanner(System.in);
        restart:
        System.out.println("Please enter a nonzero, nonnegative value to be factorialized.");
        int factInput = userInput.nextInt();

        while(factInput<=0)
        {
            System.out.println("Enter a nonzero, nonnegative value to be factorialized.");
            factInput = userInput.nextInt();
        }

        if(x<1)//This is another way of doing what the above while loop does, I just wanted to have some fun.
        {
            System.out.println("The number you entered is not valid. Please try again.");
            goto restart;
        }
        while(x<=factInput)
        {
            factValue*=x;
            x++;
        }
        System.out.println(factInput+"! = "+factValue);
        userInput.close();
    }
}

正如已经指出的所有问题的答案goto中的保留字- Java和语文不使用。

restart:被称为后跟冒号的标识符。

如果您希望实现similar行为,您需要注意以下几点:

outer:                   should be placed exactly before the loop
loopingConstructOne  {   we can have statements before the outer but not inbetween the label and the loop          
    inner:
    loopingConstructTwo {
        continue;       //goes to the top of loopingConstructTwo and continue
        break;          //breaks out of loopingConstructTwo
        continue outer; //goes to the outer label and reenters loopingConstructOne
        break outer;    //breaks out of the loopingConstructOne
        continue inner; //this will behave similar to continue
    }
}

我不知道我是否应该说similar ,因为我已经有了。


Java关键字列表指定了goto关键字,但它被标记为“未使用”。

这可能是为了将它添加到更高版本的Java中。

如果goto不在列表中,并且稍后将其添加到语言中,那么使用goto作为标识符(变量名称,方法名称等等)的现有代码将会中断。 但是因为goto是一个关键字,所以这样的代码甚至不会在当前编译,并且仍然有可能在以后实际执行某些操作,而不会破坏现有的代码。


如果你继续往下看,他们会接受一个“标签”。 试验一下。 Goto本身不起作用。

public class BreakContinueWithLabel {

    public static void main(String args[]) {

        int[] numbers= new int[]{100,18,21,30};

        //Outer loop checks if number is multiple of 2
        OUTER:  //outer label
        for(int i = 0; i<numbers.length; i++){
            if(i % 2 == 0){
                System.out.println("Odd number: " + i +
                                   ", continue from OUTER label");
                continue OUTER;
            }

            INNER:
            for(int j = 0; j<numbers.length; j++){
                System.out.println("Even number: " + i +
                                   ", break  from INNER label");
                break INNER;
            }
        }      
    }
}

阅读更多

链接地址: http://www.djcxy.com/p/24033.html

上一篇: How to use goto statement correctly

下一篇: How to split a string into a list?