例如,在 switch 语句“case 1”中,我声明了一个对象引用变量,这一切都很好,但如果我尝试在“case 2”中使用,它会说引用变量无法解析。
如何在每种情况下使用它?
编辑:
switch(choice){
case 1: {
if(HotelObj.getClassicRoomsAvailable() == 0 && HotelObj.getExecutiveRoomsAvailable() == 0){
System.out.println("Sorry, there are no available rooms");
break;
}else {
Scanner scanInput = new Scanner(System.in);
System.out.print("\nEnter desired room type: ");
System.out.print ("\nEnter \"Classic\" for a classic type room, price: 90$ for a day");
System.out.println("\nEnter \"Executive\" for a executive type room, price: 150$ for a day");
String roomChoice = scanInput.nextLine();
System.out.print("Enter your name: ");
String clientName = scanInput.nextLine();
System.out.print("Enter for how many days you'll stay:");
int stayingDays = scanInput.nextInt();
Client ClientObj = new Client(clientName, roomChoice, stayingDays);
Client.clientCount++;
if(roomChoice.equals("Classic")){
ClientObj.clientRoom = new Room("Classic");
ClientObj.setMoney(ClientObj.getMoney()- stayingDays * ClientObj.clientRoom.getPrice());
HotelObj.decClassicRooms(1);
HotelObj.addIncome(stayingDays*ClientObj.clientRoom.getPrice());
} else {
ClientObj.clientRoom = new Room("Executive");
ClientObj.setMoney(ClientObj.getMoney()-stayingDays * ClientObj.clientRoom.getPrice());
HotelObj.decExecutiveRooms(1);
HotelObj.addIncome(stayingDays*ClientObj.clientRoom.getPrice());
}
}
break;
}
case 2: {
System.out.println("Name: "+ClientObj.getName());
//Error "ClientObj cannot be resolved"
}
}
最佳答案
您在 case 语句中声明的变量是该语句的本地变量,因此,正确的是,它们不会在该语句之外看到。只需在 switch() 之前(上方)声明您的变量,它就会对所有人可见。
编辑:此示例是对下面 Brian Roach 的回应:
public void main(String[] args) { int foo = 11; switch (foo) { case 1: { int bar = 12; System.out.println("1"); break; } case 2: { System.out.println("2"); System.out.println("bar: " + bar); break; } default: { System.out.println("default"); break; } }
编译器提示:“bar 无法解析为变量”
要修复此问题,请将 bar 的声明移动到与 foo 的声明相同的位置。
关于java - 如何在整个类中使用对象引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22622368/