我希望执行的方法不会在“y”输入扫描仪时确认。它不执行if语句的第一部分,它会立即跳转到else。我不确定它为什么不起作用,是因为我有几台扫描仪同时运行?目标是使用for循环将多个答案存储到数组中,然后使用另一种方法操作数组。任何帮助,为什么会很棒!
private static float[] assignMarkArray = {0,0,0};
public static void setAssignMark(int index, float value) {
assignMarkArray[index] = value;
}
public static void setLabMark (int index, float value) {
labMarkArray[index] = value;
}
public static void enterAssignGrades() {
System.out.println("Do you have any assignment Marks? (y/n)");
Scanner sc = new Scanner(System.in);
String input = sc.nextLine();
if (input == "y"){
for(int q = 0; q < 3; q++) {
System.out.println("Do you have a mark for A" + (q+1) + "(y/n)");
Scanner sc2 = new Scanner(System.in);
String input2 = sc2.nextLine();
if (input2 == "y") {
System.out.println("Enter your A" + (q+1) + " mark (Out of 100%): " );
Scanner sc3 = new Scanner(System.in);
float gradeInput2 = sc3.nextFloat();
setAssignMark(q, gradeInput2);
}else if (q==3) {
sc.close();
sc2.close();
}
else{
setAssignMark(q, 0);
}
}
}
else{ System.out.println("There are no assignment grades to mark");
sc.close();
}
}
答案 0 :(得分:1)
用它来检查字符串值
if (input.equals("y"))
{
例如
Scanner sc = new Scanner(System.in);
String input = sc.nextLine();
if (input.equals("y")){ /// Test for Value Equivalence
System.out.println("Hello");
} else {
System.out.println("By bye");
}
答案 1 :(得分:1)
因为Strings上的==
比较了引用,而不是词法相等。您可以调用equals并测试输入是否正好是“y”,但我会使用
if (input.toLowerCase().startsWith("y")) {
}
因为那将匹配“是”,“是”,“是”或任何其他以“y”开头的词......仅包括“y”。
您也可以提取第一个字符,如此 -
if (input.toLowerCase().charAt(0) == 'y') { // this will work as expected.
}
答案 2 :(得分:0)
使用==比较Java字符串时,实际上是在比较字符串引用的地址而不是字符串中包含的数据。为避免这种情况,Java String类提供.equals()方法(或equalsIgnoreCase())。
使用其中一个来比较String的实际值。