无法正确访问getter

时间:2015-09-08 21:32:41

标签: java exception-handling

有些人可以告诉我我的代码有什么问题吗?即使我输入正确的密码,也无法通过getBalance()... :(

package home.exercises.exceptionHandling;

import java.util.InputMismatchException;
import java.util.Scanner;

public class Manager {

    private double balance = 15000.25;


        public void getBalance() throws InputMismatchException {

        @SuppressWarnings("resource")
        Scanner s = new Scanner(System.in);

        System.out.println("Enter password: ");

        String password = s.nextLine();

        if (password == "ManagerWantsTogetBalance") {

            System.out.println("Remainning balance is " + this.balance);    
        } else {
            System.out.println("Wrong password! Try Again..");
        }



    }

}



package home.exercises.exceptionHandling;

import java.util.InputMismatchException;

public class TestManager {

    public static void main(String[] args) {

        Manager branchManager = new Manager();

        try {
            branchManager.getBalance();
        }
        catch(InputMismatchException iex) {

            System.out.println("Put password in the correct form");
        }

    }

}

4 个答案:

答案 0 :(得分:1)

问题在于:

password == "ManagerWantsTogetBalance"

您应该使用equals(或equalsIgnoreCase如果您不关心大写/小写差异)来比较两个String,因为这些方法会检查实际内容

==运算符会检查对象的引用是否相等(它们指向相同的内存区域)。

有关详细信息:Java String.equals versus == [duplicate]

答案 1 :(得分:0)

您必须将Strings.equals()功能进行比较,而不是将==进行比较。

if("ManagerWantsTogetBalance".equals(password)){
  //Code
}

答案 2 :(得分:0)

比较String时,我们使用.equals(“Whatyouwanttocompare”)方法。所以你的if语句应该是这样的     if(password.equals(“ManagerWantsTo GetBalance”)){ } 您使用==来比较原始数据类型,例如int和double等。

答案 3 :(得分:0)

==运算符比较对象引用。因此,仅当操作数是相同对象时才返回true。在字符串的情况下,只有当对象是相同的字符串时才会返回true。如果要比较字符串,请使用equals方法。如果字符串的内容与您期望的行为相同,则返回true:

string1.equals(string2)