Java 从另一个方法调用一个方法,其中两个方法都在同一个类中
我正在从Java 从另一个方法调用一个方法,其中两个方法都在同一个类中,java,arrays,methods,method-call,Java,Arrays,Methods,Method Call,我正在从main方法调用类myClass中的方法findRoom(): 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.count++; break; } e
main
方法调用类myClass
中的方法findRoom()
:
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.count++;
break;
} else {
myClass.count++;
if (myClass.count == 10) {
System.out.println("Please check the name again");
myClass.count = 0;
m.findRoom(cusName, rooms);
}
类别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);
}
}
}
class-myClass{
整数计数=0;
public void findRoom(字符串customerName[],int-roomNo[]){
扫描仪sc=新的扫描仪(System.in);
System.out.println(“请输入客户名称”);
字符串名称=sc.next();
对于(int i=0;i<10;i++){
if(客户名称[i].equalsIgnoreCase(名称)){
系统输出打印号(房间号[i]);
计数++;
打破
}否则{
计数++;
}
}
myMethod(客户名称,房间号);
}
公共void myMethod(字符串cusName[],int rooms[]){
myClass m=新的myClass();
如果(m.count==10){
System.out.println(“请再次检查名称”);
m、 计数=0;
m、 findRoom(客户名称、房间);
}
}
}
如果在数组customer[]
中找不到用户输入的名称,我希望程序提示用户再次输入客户名称。因此,我创建了方法myMethod()
,它将要求用户重新输入客户的姓名
如果用户输入的名称已存在于数组中,则程序运行正常,但如果用户输入的名称未在数组中找到,则程序不会以相反的方式运行。未调用方法
myMethod()
。可能的原因是什么?这是参数传递的问题吗?感谢您的帮助。=) 您的错误是,当您进入myMethod
时,您创建了新的myClass
对象,该对象具有count
字段,但该字段的值为零,因为这是新对象。但所有工作和更改count
字段都将进入在main
方法中创建的另一个对象:
myClass m = new myClass();
m.findRoom(customer, room);
如果您需要如此简单的示例,请尝试在字段计数中使用:
static int count = 0;
编辑findRoom
方法:
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.count++;
break;
} else {
myClass.count++;
if (myClass.count == 10) {
System.out.println("Please check the name again");
myClass.count = 0;
m.findRoom(cusName, rooms);
}
编辑myMethod
方法:
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.count++;
break;
} else {
myClass.count++;
if (myClass.count == 10) {
System.out.println("Please check the name again");
myClass.count = 0;
m.findRoom(cusName, rooms);
}
您的错误是,当您进入myMethod
时,您创建了新的myClass
对象,该对象具有count
字段,但该字段的值为零,因为这是新对象。但所有工作和更改count
字段都将进入在main
方法中创建的另一个对象:
myClass m = new myClass();
m.findRoom(customer, room);
如果您需要如此简单的示例,请尝试在字段计数中使用:
static int count = 0;
编辑findRoom
方法:
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.count++;
break;
} else {
myClass.count++;
if (myClass.count == 10) {
System.out.println("Please check the name again");
myClass.count = 0;
m.findRoom(cusName, rooms);
}
编辑myMethod
方法:
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.count++;
break;
} else {
myClass.count++;
if (myClass.count == 10) {
System.out.println("Please check the name again");
myClass.count = 0;
m.findRoom(cusName, rooms);
}
首先,我建议您学习更多关于对象和类的知识。在方法myMethod()
中的代码中,第一条语句用于创建myClass
的新对象。当您创建该类时,就好像您正在获取类属性的新副本。(如果它们不是静态的)所以它总是会给你变量计数和你给它的值,即0。
如果您的代码必须记住给定给类变量的值,而不依赖于您创建的对象,那么您必须使它们成为静态的。然后您可以调用这些变量,而无需创建对象。
myClass.count;
所以你要做的就是替换int count=0代码>带有静态整数计数=0代码>
还有一些事情可以改进您的编码。
- 以大写字母开始类名(这不是一个规则,而是一个好的实践)
- 了解有关静态和非静态方法/变量之间的差异的更多信息
- 通常,类变量与
private
access修饰符一起使用。(用于封装)
首先,我建议您学习更多关于对象和类的知识。在方法myMethod()
中的代码中,第一条语句用于创建myClass
的新对象。当您创建该类时,就好像您正在获取类属性的新副本。(如果它们不是静态的)所以它总是会给你变量计数和你给它的值,即0。
如果您的代码必须记住给定给类变量的值,而不依赖于您创建的对象,那么您必须使它们成为静态的。然后您可以调用这些变量,而无需创建对象。
myClass.count;
所以你要做的就是替换int count=0代码>带有静态整数计数=0代码>
还有一些事情可以改进您的编码。
- 以大写字母开始类名(这不是一个规则,而是一个好的实践)
- 了解有关静态和非静态方法/变量之间的差异的更多信息
- 通常,类变量与
private
access修饰符一起使用。(用于封装)
像这样的东西应该可以做到:
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);
}
}
}
import java.util.Scanner;
公共类MyClass{
静室内;
静态字符串[]客户;
公共静态void main(字符串[]args){
房间=新的整数[]{1,2,3,4,5,6,7,8,9,10};
customer=newstring[]{“,”Shay“,”,”Yan“,”Pan“,”,”Xiao“,”Ali“,”};
MyClass mc=新的MyClass();
司仪findRoom(客户、房间);
}
public void findRoom(字符串customerName[],int-roomNo[]){
扫描仪sc=新的扫描仪(System.in);
System.out.println(“请输入客户名称”);
字符串名称=sc.next();
整数计数=0;
对于(int i=0;i
递归(方法本身调用)使您不必创建两个方法,也不用使用arrayName。