可以'如果'声明有多个结果'然后'?

时间:2014-07-20 03:45:10

标签: java if-statement

如果这个问题过于简单,我会道歉,但我已经尝试了Google,但我找不到具体的答案(主要是因为我不知道如何说出我的问题)。

我只是想知道Java中的if语句是否可以有多个'then',即

public class test {

     if (condition) {
      then...;
      then 2...?;
     }
}

例如,第一个条件为真。第一个然后发生,它说抛出异常。我可以在之后添加另一个,这也会在抛出异常后发生吗?

感谢您寻找

编辑:我理解我的问题有点含糊不清。我想我想说的是这样的:

public class test {

  public String checkAnswer(String answer) throws Exception {
     if (!a == b) {
      throw new Exception;
      this.ans = this.ans + a;
     }
     else {
        return "You are wrong."
}

第二行(this.ans ......)是否允许存在?因为如果不满足条件,两者都会抛出新的异常并且该行都会出现吗?

5 个答案:

答案 0 :(得分:3)

是的,你可以嵌套if block,如果这就是你所要求的。这是合法的Java:

if (foo) {
  if (bar) {
    System.out.println("both foo and bar are true");
  } else {
    System.out.println("foo is true, but bar is false");
  }
} else {
  if (bar) {
    System.out.println("foo is false, but bar is true");
  } else {
    System.out.println("both foo and bar are false");
  }
}

但这也可以用非嵌套方式编写:

if (foo && bar) {
  System.out.println("both foo and bar are true");
} else if (foo && !bar) {
    System.out.println("foo is true, but bar is false");
} else if (!foo && bar) {
    System.out.println("foo is false, but bar is true");
} else {
    System.out.println("foo and bar are both false");
}

修改
关于你的新代码:

public class test {

  public String checkAnswer(String answer) throws Exception {
     if (!a == b) {
      throw new Exception;
      this.ans = this.ans + a;
     }
     else {
        return "You are wrong."
}

首先,它不会编译,你应该真的努力只发布编译的代码,或者如果你的问题是编译问题,那么你最好努力让它编译,然后你展示你的编译错误。

假设您向new Exception();添加括号,您的编译器仍应显示问题,因为抛出异常下面的代码无法访问。

相反,您会希望throw异常下的行高于它。您还需要更正不平等声明:

     if (a != b) {  // ** note the different equality test
       this.ans = this.ans + a;
       throw new AnswerWrongException("some string here");
     }

你有一个很棒的实验室 - 你的Java编译器和JVM,你应该测试这些东西并看看它告诉你什么,因为它可以在我们任何人之前给你一个正确而明确的答案。< / p>

答案 1 :(得分:1)

首先,不存在多种情况。但是,考虑到这个问题,

  

例如,第一个条件为真。第一个然后发生,它说抛出异常。我可以在之后添加另一个,这也会在抛出异常后发生吗?

你真的要求finally阻止,所以请使用一个。

try {
  if (condition) {
    System.out.println("condition is true");
  } else {
    System.out.println("condition is false");
  }
} finally {
  System.out.println("This always prints");
}

修改

  

如果(a + b == c)为真,我可以在前一个程序段中放置两个不同的动作(a = a + b)和(b = b + c)

是。您可以使用+=,因为您希望将算术结果分配给第一个术语 -

int a = 1;
int b = 2;
int c = 3;
if (a + b == c) {
  a += b;
  b += c;
}
System.out.printf("a=%d, b=%d, c=%d%n", a, b, c);

答案 2 :(得分:0)

不,if语句只能有一个。如果等等等等等等等等。我不是100%肯定,认为它可能还取决于编码语言。 虽然在java中,没有。

答案 3 :(得分:0)

if-block中的所有内容都会被执行:

public class test {

    if (condition) {
        methodA();
        methodB();
    }
}

这里,因为两个方法都在大括号({})之间,所以methodA()methodB()都会被执行。

引入异常处理会根据您编写异常的方式更改答案。如果您编写它以使其突破methodA()处的当前代码块,则不会执行methodB()。当然,你必须故意以这种方式写作。

答案 4 :(得分:0)

这与if陈述无关 你想要的是一个try-catch块:

 if (condition) {
     try {
         // some code that may throw exceptions
     } catch (SomeException e) {
         //
     }
     // some more code, which can also be in anoth try-catch
 }