Java 当我输入sbi(caps lock off)时,我将得到if语句和else语句的结果。如何获得if语句的唯一结果?
这是我的场景:Bank是一个提供获取利率功能的类。然而,利率因银行而异。例如,SBI、ICICI和AXIS银行可以提供8%、7%和9%的利率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
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");
}
}
}