有谁知道为什么我的if语句不起作用?

时间:2020-10-13 06:07:35

标签: java if-statement

此代码从最小到最大对三个数字进行排序。 但是,我的else语句在第15、18、23、26和31行给了我4条错误。有人知道为什么会这样吗?

import java.util.*;
public class sortnumber {
  public static void main (String[] args) {
    Scanner scan = new Scanner (System.in);
    int num1, num2, num3, random;
    num1 = scan.nextInt();
    num2 = scan.nextInt();
    num3 = scan.nextInt();
    random = 0;
    if (num1 < num2 && num1 < num3) 
        System.out.print (num1);
        if (num2 < num3)
            System.out.print (num2);
            System.out.print (num3);
        else
            System.out.print (num3);
            System.out.print (num2);            
    else if (num2 < num1 && num2 < num3)
        System.out.print (num2);
        if (num1 < num3)
            System.out.print (num1);
            System.out.print (num3);
        else
            System.out.print (num3);
            System.out.print (num1);
    else if (num3 < num2 && num3 < num1)
        System.out.print (num3);
        if (num2 < num1)
            System.out.print (num2);
            System.out.print (num1);
        else
            System.out.print (num1);
            System.out.print (num2);
  }
}

3 个答案:

答案 0 :(得分:3)

由于您没有大括号,因此您的缩进是错误的。您实际编码的是:

random = 0;
if (num1 < num2 && num1 < num3) 
    System.out.print (num1);
if (num2 < num3)
    System.out.print (num2);
System.out.print (num3);
else                                 // <===== ERROR
    System.out.print (num3);
System.out.print (num2);
else if (num2 < num1 && num2 < num3) // <===== ERROR
    System.out.print (num2);
if (num1 < num3)
    System.out.print (num1);
System.out.print (num3);
else                                 // <===== ERROR
    System.out.print (num3);
System.out.print (num1);
else if (num3 < num2 && num3 < num1) // <===== ERROR
    System.out.print (num3);
if (num2 < num1)
    System.out.print (num2);
System.out.print (num1);
else                                 // <===== ERROR
    System.out.print (num1);
System.out.print (num2);

如果添加缩进指示的花括号,则会得到以下信息:

random = 0;
if (num1 < num2 && num1 < num3) {
    System.out.print(num1);
    if (num2 < num3) {
        System.out.print(num2);
        System.out.print(num3);
    } else {
        System.out.print(num3);
        System.out.print(num2);
    }
} else if (num2 < num1 && num2 < num3) {
    System.out.print(num2);
    if (num1 < num3) {
        System.out.print(num1);
        System.out.print(num3);
    } else {
        System.out.print(num3);
        System.out.print(num1);
    }
} else if (num3 < num2 && num3 < num1) {
    System.out.print(num3);
    if (num2 < num1) {
        System.out.print(num2);
        System.out.print(num1);
    } else {
        System.out.print(num1);
        System.out.print(num2);
    }
}

为了防止发生此类错误,通常建议始终使用花括号。

答案 1 :(得分:1)

如果if / else if / else语句下的代码块超过一行,则需要大括号({,})。例如,您的第一个if语句完全有效。但是,错误仍在其余代码中。我建议几乎总是使用花括号,因为它通常会使您的代码更具可读性(即使if语句下只有一行)。

答案 2 :(得分:0)

您缺少花括号。

Java代码不关注换行符的开始位置或缩进量。而是使用行尾字符(分号)和花括号。

尽管Java支持无括号的if / else语句,但它们仅将一个语句与ifelse关联。最好始终在要包含在条件语句中的代码周围包括花括号。

例如,采用您的第一个嵌套的if语句:

if (num1 < num2 && num1 < num3) {
    System.out.print (num1);
    if (num2 < num3) {
        System.out.print (num2);
        System.out.print (num3);
    }
    else {
        System.out.print (num3);
        System.out.print (num2);            
    }
}

在此页面上查看一些旧的但有用的指针:http://www.fredosaurus.com/notes-java/flow/if/30if-braces.html