我想用词汇法排列字符串。我的代码也能工作。但当我输入字符串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
,则需要将中间if
s转换为if else
s。
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语句!