我正在使用findRoom()
方法调用类myClass
中的方法main
:
int room[]= {1,2,3,4,5,6,7,8,9,10};
String customer[] = {"","Shay","","Yan","Pan","","","Xiao","Ali",""};
myClass m = new myClass();
m.findRoom(customer, room);
班级myClass
如下:
class myClass {
int count = 0;
public void findRoom(String customerName[], int roomNo[]) {
Scanner sc = new Scanner(System.in);
System.out.println("Please enter Customer's Name");
String name = sc.next();
for (int i = 0; i < 10; i++) {
if (customerName[i].equalsIgnoreCase(name)) {
System.out.println(roomNo[i]);
count++;
break;
} else {
count++;
}
}
myMethod(customerName, roomNo);
}
public void myMethod(String cusName[], int rooms[]) {
myClass m = new myClass();
if (m.count == 10) {
System.out.println("Please check the name again");
m.count = 0;
m.findRoom(cusName, rooms);
}
}
}
如果在数组customer[]
中找不到用户输入的名称,我希望程序再次提示用户输入客户名称。所以我创建了方法myMethod()
,它将要求用户重新输入客户的名字。
如果用户输入已在数组中的名称,程序运行正常,但当用户输入在数组中找不到的名称时,程序无法正常工作。方法myMethod()
未被调用。可能的原因是什么?这是参数传递的问题吗?任何帮助表示赞赏。 =)
答案 0 :(得分:2)
您的错误在于,当您进入myMethod
时,您创建了新的myClass
对象,并且此对象具有count
字段,但此字段的值为零,因为这是新的宾语。但是您在count
方法中创建的另一个对象中的所有工作和更改main
字段:
myClass m = new myClass();
m.findRoom(customer, room);
如果您需要这么简单的示例,请尝试在字段count
上使用static
modifier:
static int count = 0;
修改findRoom
方法:
myClass.count++;
break;
} else {
myClass.count++;
修改myMethod
方法:
if (myClass.count == 10) {
System.out.println("Please check the name again");
myClass.count = 0;
m.findRoom(cusName, rooms);
}
答案 1 :(得分:1)
首先,我建议您了解有关对象和类的更多信息。在方法myMethod()
的代码中,第一个语句用于创建myClass
的新对象。当你创建它时,就像你正在获取类的属性的新副本。 (如果它们不是静态的)那么总是它会给你变量计数你给它的值,即0
如果您的代码必须记住给予类变量的值而不依赖于您创建的对象,则必须将它们设置为静态。然后你可以在不创建对象的情况下调用这些变量。
myClass.count;
所以你要做的就是用int count=0;
替换static int count=0;
还有一些东西可以改善你的编码。
private
访问修饰符一起使用。 (用于封装)答案 2 :(得分:0)
这样的事情可以解决问题:
import java.util.Scanner;
public class MyClass {
static int[] room;
static String[] customer;
public static void main(String[] args) {
room = new int[]{1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
customer = new String[]{"", "Shay", "", "Yan", "Pan", "", "", "Xiao", "Ali", ""};
MyClass mc = new MyClass();
mc.findRoom(customer, room);
}
public void findRoom(String customerName[], int roomNo[]){
Scanner sc = new Scanner(System.in);
System.out.println("Please enter the Customer's name.");
String name = sc.next();
int count = 0;
for(int i = 0; i < customerName.length; i++){
if(customerName[i].equalsIgnoreCase(name)){
System.out.println(name + " is in room number " + roomNo[i]);
break;
}
else{
count++;
}
}
//##### RECURSION STARTS HERE #####
if(count == customerName.length){
count = 0;
System.out.println("Name not found, please try again.\n");
findRoom(customerName, roomNo);
}
}
}
递归(调用自身的方法),使您不必创建两个方法,也可以在&#39; if语句中使用arrayName.length。如果您决定使用更大的数组,将避免您必须硬编码。