为什么if语句不会在我的for循环中执行?

时间:2014-01-25 05:41:27

标签: java

我希望执行的方法不会在“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();
    }
}

3 个答案:

答案 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的实际值。