Java:标签打破

时间:2015-12-25 05:43:57

标签: java break

我正在线上追求学习Java的练习练习并且难倒!

我的程序的要点是我让用户通过单个字符串的输入选择一个选项,然后程序根据值继续到案例。如果执行默认情况,则表示输入无效,然后我想返回用户输入提示。

我最初的想法是使用'goto',但是根据我的理解,除了我阅读代码之外,我可能被任何人扔石头致死。然后就是Java中不存在goto的事实......所以当谷歌搜索时,我发现了'标记符号'。它看起来就像我需要的那样。但是,我插入标签的位置无法识别,即使它与案例属于同一类。我应该怎么做呢?

String newLine = System.getProperty("line.separator");

  restart:

  System.out.println("Please select the type of shape you wish to calcuate information for: "
  + newLine + "A: Square" + newLine + "B: Rectangle" + newLine + "C: Circle");

  char typeShape = input.next().charAt(0);

  String shape = Character.toString(typeShape);

  switch (shape.toLowerCase()) {
      case "a": 
          //do something
          break;
      case "b":
          //do something
          break;
      case "c":
          //do something
          break;
      default:
          System.out.println("Invalid selection. Please re-enter shape.");
          break restart;
  }

4 个答案:

答案 0 :(得分:4)

我相信你想要标记一个块。像

这样的东西
restart: {
    System.out.println("Please select the type of shape you wish to calculate "
      + "information for: " + newLine + "A: Square" + newLine + "B: Rectangle"
      + newLine + "C: Circle");

    char typeShape = input.next().charAt(0);

    String shape = Character.toString(typeShape);

    switch (shape.toLowerCase()) {
    case "a": 
        //do something
        break;
    case "b":
        //do something
        break;
    case "c":
        //do something
        break;
    default:
        System.out.println("Invalid selection. Please re-enter shape.");
        break restart;
    }
}

答案 1 :(得分:4)

我想一个简单的方法是使用do-while循环。如果条件不满足(输入/字符无效),继续循环,否则将标志设置为false并退出。

boolean inputFlag;
do {
System.out.println("Please select the type of shape you wish to calcuate information for: "
    + newLine + "A: Square" + newLine + "B: Rectangle" + newLine + "C: Circle");

  char typeShape = input.next().charAt(0);
  String shape = Character.toString(typeShape);

  switch (shape.toLowerCase()) {
    case "a":
      inputFlag = false;
      //do something
      break;
    case "b":
      inputFlag = false;
      //do something
      break;
    case "c":
      inputFlag = false;
      //do something
      break;
    default:
      System.out.println("Invalid selection. Please re-enter shape.");
      inputFlag = true;
  }
} while (inputFlag);

答案 2 :(得分:3)

Java允许您标记循环结构(例如forwhile),然后跳出其中一个循环到外层。

该语言不允许您标记任意行和"转到"它们。

更新:显然我错了。 Java支持标记任意块(但不支持单个语句)。见https://stackoverflow.com/a/1940322/14731

答案 3 :(得分:2)

由于类似的原因,标记的块被不赞成goto不赞成:它不是自然流动。

话虽如此,你可能想知道如何管理你想要的行为,这很简单:使用循环

//pseudo-code
while(something) {
    repeatCode
}

在你的情况下,你会做类似的事情:

boolean choosing = true;
while(choosing) {
    switch(...) {
        case "a":
            choosing = false;
            break;
        case "b":
            choosing = false;
            break;
    }
}

您可能会发现这有点冗长。相反,您可以在进入循环后立即选择为false,然后在用户未输入正确名称时将其设置为true。

或者更好的是,使用do-while循环

boolean choosing = false;
do {
    switch(...) {
        case "a":
            break;
        default:
            choosing = true;
            break;
    }
} while(choosing);