Java 当我输入sbi(caps lock off)时,我将得到if语句和else语句的结果。如何获得if语句的唯一结果?

Java 当我输入sbi(caps lock off)时,我将得到if语句和else语句的结果。如何获得if语句的唯一结果?,java,Java,这是我的场景:Bank是一个提供获取利率功能的类。然而,利率因银行而异。例如,SBI、ICICI和AXIS银行可以提供8%、7%和9%的利率 class bank{ public String name; int interest(){ return 0; } String name(){ name = "bank"; r

这是我的场景:Bank是一个提供获取利率功能的类。然而,利率因银行而异。例如,SBI、ICICI和AXIS银行可以提供8%、7%和9%的利率

    class bank{
        public String name;
        int interest(){
            return 0;
            }
            String name(){
                name = "bank";
                return name;
            }
            }
    //SBI Bank
            class SBI extends bank {
                int interest() {
                    return 8;
                }

                public String name() {
                    String name;
                    name = "SBI";
                    return name;
                }
            }
    //ICICI Bank
            class ICICI extends bank {
                int interest() {
                    return 7;
                }

                String name() {
                    String name;
                    name = "ICICI";
                    return name;
                }
            }
    //Axis Bank

            class AXIS extends bank {
                int interest() {
                    return 9;
                }

                String name() {
                    String name;
                    name = "AXIS";``
                    return name;
                }
            }


    /*Main Class*/
                public class head {
                    public static void main(String args[]) {



                        String n;
                        SBI s = new SBI();
                        ICICI i = new ICICI();
                        AXIS a = new AXIS();

                        System.out.println("Enter the bank name");

                        java.util.Scanner sc = new java.util.Scanner(System.in);
                        n = sc.next();

    /*Conditional Statements*/

                        if (n.equalsIgnoreCase(s.name())) {
                            System.out.println("SBI rate of Interest is " + s.interest());

                        }
                        if (n.equalsIgnoreCase(i.name())) {
                            System.out.println("ICICI rate of Interest is " + i.interest());
                        }
                        if (n.equalsIgnoreCase(a.name())) {
                            System.out.println("AXIS rate of Interest is " + a.interest());
                        } 
                        else {
                            System.out.println("Invalid Input");
                            System.out.println("Enter SBI , ICICI or AXIS");
                        }
                    }
                }

您的代码在else中返回print语句,因为该else仅用于最后一个if条件语句,即

if (n.equalsIgnoreCase(a.name()))
它正在执行else块,因为SBI不等于.name

来解决这个问题。你应该这样做

if (n.equalsIgnoreCase(s.name())) {
                        System.out.println("SBI rate of Interest is " + s.interest());

                    }else 
                    if (n.equalsIgnoreCase(i.name())) {
                        System.out.println("ICICI rate of Interest is " + i.interest());
                    }else 
                    if (n.equalsIgnoreCase(a.name())) {
                        System.out.println("AXIS rate of Interest is " + a.interest());
                    } 
                    else {
                        System.out.println("Invalid Input");
                        System.out.println("Enter SBI , ICICI or AXIS");
                    }

虽然这可以解决您的问题,但我建议您使用switch语句。

这里有几个严重的问题。现在困扰您的一个问题是,您没有在
if
语句之间使用
else if
,这些语句应该是相互排斥的。解决这个问题会解决你眼前的问题

但是子类的
name
字段从未设置。它将是
null
,除非您在某个时候设法调用
bank
基类的
name()
方法。该方法将字段设置为
“bank”

需要说明的是,这些子类没有设置
name
字段,因为在
name()
方法中有一个局部变量
name
,该变量会遮挡字段

public String name() {
    String name;   // this local variable shadows the "name" field
    name = "SBI";  // this sets the local variable; the field remains null
    return name;
}
最终调用基类的
name()
方法的一种方法是:

bank b = new SBI();
System.out.println(b);
即使它是一个
SBI
对象,它也会调用基类的方法,因为变量被声明为
bank
,而不是
SBI

这将打印
bank
,现在该
SBI
对象的
name
字段将设置为
“bank”
,尽管如果调用其
name()
方法,它仍将返回
“SBI”
。但是如果您访问它的
名称
字段,您将看到它是
“名称”

这将打印
SBI
,然后打印
name
。这是灾难的秘诀。最后,我要注意的是,
name
字段是
public
,这可能会导致进一步的问题,并且您没有遵循正常的Java命名约定,即类名以大写字母开头,字段和变量以小写字母开头,常量都是大写的。特别是,类
bank
应命名为
bank
。不遵循标准命名约定会使您的代码更难被其他程序员阅读,并且使您在这里获得程序帮助的可能性降低


你需要重新考虑你的设计。该字段应该是
受保护的
并在构造函数中设置,或者您应该去掉该字段并从
name()
方法返回一个常量,此时
Bank
可能只是与
name()
interest()
方法的接口,而不是类。(或者从
toString()
方法返回名称,并使
Bank
成为一个功能接口(一个只有一个抽象方法的接口。)最后,您需要使用
else if
来获得一系列互斥的if条件。

使用else if条件并重新标记以使车辆类抽象

 abstract class bank{
       public String name;
       abstract int interest();
       abstract String name();

        }
//SBI Bank
        class SBI extends bank {
            int interest() {
                return 8;
            }

            public String name() {
                String name;
                name = "SBI";
                return name;
            }
        }
//ICICI Bank
        class ICICI extends bank {
            int interest() {
                return 7;
            }

            String name() {
                String name;
                name = "ICICI";
                return name;
            }
        }
//Axis Bank

        class AXIS extends bank {
            int interest() {
                return 9;
            }

            String name() {
                String name;
                name = "AXIS";
                return name;
            }
        }


/*Main Class*/
            public class Demo {
                public static void main(String args[]) {



                    String n;
                    SBI s = new SBI();
                    ICICI i = new ICICI();
                    AXIS a = new AXIS();

                    System.out.println("Enter the bank name");

                    java.util.Scanner sc = new java.util.Scanner(System.in);
                    n = sc.next();

/*Conditional Statements*/

                    if (n.equalsIgnoreCase(s.name())) {
                        System.out.println("SBI rate of Interest is " + s.interest());

                    }
                    else if (n.equalsIgnoreCase(i.name())) {
                        System.out.println("ICICI rate of Interest is " + i.interest());
                    }
                    else if (n.equalsIgnoreCase(a.name())) {
                        System.out.println("AXIS rate of Interest is " + a.interest());
                    } 
                    else {
                        System.out.println("Invalid Input");
                        System.out.println("Enter SBI , ICICI or AXIS");
                    }
                }
            }

在调试器中或在纸上逐步检查代码。看看你的条件句,看看它们是如何相互关联的,或者在它们应该相互关联的时候是如何不关联的。
 abstract class bank{
       public String name;
       abstract int interest();
       abstract String name();

        }
//SBI Bank
        class SBI extends bank {
            int interest() {
                return 8;
            }

            public String name() {
                String name;
                name = "SBI";
                return name;
            }
        }
//ICICI Bank
        class ICICI extends bank {
            int interest() {
                return 7;
            }

            String name() {
                String name;
                name = "ICICI";
                return name;
            }
        }
//Axis Bank

        class AXIS extends bank {
            int interest() {
                return 9;
            }

            String name() {
                String name;
                name = "AXIS";
                return name;
            }
        }


/*Main Class*/
            public class Demo {
                public static void main(String args[]) {



                    String n;
                    SBI s = new SBI();
                    ICICI i = new ICICI();
                    AXIS a = new AXIS();

                    System.out.println("Enter the bank name");

                    java.util.Scanner sc = new java.util.Scanner(System.in);
                    n = sc.next();

/*Conditional Statements*/

                    if (n.equalsIgnoreCase(s.name())) {
                        System.out.println("SBI rate of Interest is " + s.interest());

                    }
                    else if (n.equalsIgnoreCase(i.name())) {
                        System.out.println("ICICI rate of Interest is " + i.interest());
                    }
                    else if (n.equalsIgnoreCase(a.name())) {
                        System.out.println("AXIS rate of Interest is " + a.interest());
                    } 
                    else {
                        System.out.println("Invalid Input");
                        System.out.println("Enter SBI , ICICI or AXIS");
                    }
                }
            }