Java Output if and else?



我想用词汇法排列字符串。我的代码也能工作。但当我输入字符串Hans、Anna和Max时,他会同时给我"if"one_answers"else"的println。错误在哪里?

import java.util.Scanner;
class ersteAufgabe {
public static void main(String args[]) {
Scanner scan = new Scanner(System.in);
String s1 = scan.nextLine();
String s2 = scan.nextLine();
String s3 = scan.nextLine();
if (s1.compareTo(s2) < 0 & s1.compareTo(s3) < 0 & s2.compareTo(s1) > 0 & s2.compareTo(s3) < 0 & s3.compareTo(s1) > 0 & s3.compareTo(s2) > 0) 
{
System.out.println("Ordnung:" + s1 +" "+ s2 +" " + s3);  
}
if (s1.compareTo(s2) < 0 & s1.compareTo(s3) < 0 & s2.compareTo(s1) > 0 & s2.compareTo(s3) > 0 & s3.compareTo(s1) > 0 & s3.compareTo(s2) < 0) 
{
System.out.println("Ordnung:" + s1 +" "+ s3 +" " + s2);  
}
if (s1.compareTo(s2) > 0 & s1.compareTo(s3) < 0 & s2.compareTo(s3) < 0 & s2.compareTo(s1) < 0 & s3.compareTo(s1) > 0 & s3.compareTo(s2) > 0) 
{
System.out.println("Ordnung:" + s2 +" "+ s1 +" " + s3);  
}
if (s1.compareTo(s2) > 0 & s1.compareTo(s3) > 0 & s2.compareTo(s1) < 0 & s2.compareTo(s3) < 0 & s3.compareTo(s1) < 0 & s3.compareTo(s2) > 0) 
{
System.out.println("Ordnung:" + s2 +" "+ s3 +" " + s1);  
}
if (s1.compareTo(s2) < 0 & s1.compareTo(s3) > 0 & s2.compareTo(s3) > 0 & s2.compareTo(s1) > 0 & s3.compareTo(s1) < 0 & s3.compareTo(s2) < 0)
{
System.out.println("Ordnung:" + s3 +" "+ s1 +" " + s2);  
}
if (s1.compareTo(s2) > 0 & s1.compareTo(s3) > 0 & s2.compareTo(s1) < 0 & s2.compareTo(s3) > 0 & s3.compareTo(s2) < 0 & s3.compareTo(s1) < 0)
{
System.out.println("Ordnung:" + s3 +" "+ s2 +" " + s1);  
} else{
System.out.println("Ungueltige Eingabe");
}
}
}

代码中的else仅连接到最后一个if。这意味着,如果其他if中的一个为真(并且最后一个if为假(,则也执行else。所以试试这个:

public static void main(String args[]) {
Scanner scan = new Scanner(System.in);
String s1 = scan.nextLine();
String s2 = scan.nextLine();
String s3 = scan.nextLine();
if (s1.compareTo(s2) < 0 & s1.compareTo(s3) < 0 & s2.compareTo(s1) > 0 & s2.compareTo(s3) < 0 & s3.compareTo(s1) > 0 & s3.compareTo(s2) > 0) 
{
System.out.println("Ordnung:" + s1 +" "+ s2 +" " + s3);  
}
else if (s1.compareTo(s2) < 0 & s1.compareTo(s3) < 0 & s2.compareTo(s1) > 0 & s2.compareTo(s3) > 0 & s3.compareTo(s1) > 0 & s3.compareTo(s2) < 0) 
{
System.out.println("Ordnung:" + s1 +" "+ s3 +" " + s2);  
}
else if (s1.compareTo(s2) > 0 & s1.compareTo(s3) < 0 & s2.compareTo(s3) < 0 & s2.compareTo(s1) < 0 & s3.compareTo(s1) > 0 & s3.compareTo(s2) > 0) 
{
System.out.println("Ordnung:" + s2 +" "+ s1 +" " + s3);  
}
else if (s1.compareTo(s2) > 0 & s1.compareTo(s3) > 0 & s2.compareTo(s1) < 0 & s2.compareTo(s3) < 0 & s3.compareTo(s1) < 0 & s3.compareTo(s2) > 0) 
{
System.out.println("Ordnung:" + s2 +" "+ s3 +" " + s1);  
}
else if (s1.compareTo(s2) < 0 & s1.compareTo(s3) > 0 & s2.compareTo(s3) > 0 & s2.compareTo(s1) > 0 & s3.compareTo(s1) < 0 & s3.compareTo(s2) < 0)
{
System.out.println("Ordnung:" + s3 +" "+ s1 +" " + s2);  
}
else if (s1.compareTo(s2) > 0 & s1.compareTo(s3) > 0 & s2.compareTo(s1) < 0 & s2.compareTo(s3) > 0 & s3.compareTo(s2) < 0 & s3.compareTo(s1) < 0)
{
System.out.println("Ordnung:" + s3 +" "+ s2 +" " + s1);  
} else{
System.out.println("Ungueltige Eingabe");
}
}
}

您的代码是一系列if,它们都是独立的,而不是附加到else的最后一个。如果您希望最后一个else充当整个链的else,则需要将中间ifs转换为if elses。

if (condition1) {
// Do something...
} else if (condition2) {
// Do something else...
} else {
// Do something if neither condition1 nor condition2
}

旁注:我看到您使用的是按位和运算符(&(,而不是布尔和运算符(&&(。尽管它在您的情况下可能有效,但我强烈警告您不要将逐位运算符用于除逐位操作之外的任何操作,因为它的优先级高于不等式,而布尔运算符的优先级较低,这可能会导致意外的结果。

您需要将控制语句更改为,

if (s1.compareTo(s2) < 0 & s1.compareTo(s3) < 0 & s2.compareTo(s1) > 0 & s2.compareTo(s3) < 0 & s3.compareTo(s1) > 0 & s3.compareTo(s2) > 0) {
System.out.println("Ordnung:" + s1 + " " + s2 + " " + s3);
}
else if (s1.compareTo(s2) < 0 & s1.compareTo(s3) < 0 & s2.compareTo(s1) > 0 & s2.compareTo(s3) > 0 & s3.compareTo(s1) > 0 & s3.compareTo(s2) < 0) {
System.out.println("Ordnung:" + s1 + " " + s3 + " " + s2);
}
else if (s1.compareTo(s2) > 0 & s1.compareTo(s3) < 0 & s2.compareTo(s3) < 0 & s2.compareTo(s1) < 0 & s3.compareTo(s1) > 0 & s3.compareTo(s2) > 0) {
System.out.println("Ordnung:" + s2 + " " + s1 + " " + s3);
}
else if (s1.compareTo(s2) > 0 & s1.compareTo(s3) > 0 & s2.compareTo(s1) < 0 & s2.compareTo(s3) < 0 & s3.compareTo(s1) < 0 & s3.compareTo(s2) > 0) {
System.out.println("Ordnung:" + s2 + " " + s3 + " " + s1);
}
else if (s1.compareTo(s2) < 0 & s1.compareTo(s3) > 0 & s2.compareTo(s3) > 0 & s2.compareTo(s1) > 0 & s3.compareTo(s1) < 0 & s3.compareTo(s2) < 0) {
System.out.println("Ordnung:" + s3 + " " + s1 + " " + s2);
}
else if (s1.compareTo(s2) > 0 & s1.compareTo(s3) > 0 & s2.compareTo(s1) < 0 & s2.compareTo(s3) > 0 & s3.compareTo(s2) < 0 & s3.compareTo(s1) < 0) {
System.out.println("Ordnung:" + s3 + " " + s2 + " " + s1);
} else {
System.out.println("Ungueltige Eingabe");
}

所以他们中只有一个人被处决。您当前拥有的是多个不相关的if语句!

最新更新