[英]Calling a method from another method in which both are in the same class
我正在從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
如下:
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()
。 這可能是什么原因? 參數傳遞有問題嗎? 任何幫助表示贊賞。 =)
您的錯誤是,當您進入myMethod
,創建了新的myClass
對象,並且該對象具有count
字段,但是該字段的值為零,因為這是新對象。 但是,所有工作和更改count
字段都將進入您在main
方法中創建的另一個對象中:
myClass m = new myClass();
m.findRoom(customer, room);
如果您需要如此簡單的示例,請嘗試對字段count
使用static
修飾符 :
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);
}
首先,我建議您了解有關對象和類的更多信息。 在方法myMethod()
代碼中,第一條語句用於創建myClass
的新對象。 當您創建它時,就好像您正在復制類的屬性一樣。 (如果它們不是靜態的),那么它將始終為您提供變量計數以及您賦予它的值,即0。
如果您的代碼必須記住賦予類變量的值而不取決於您創建的對象,則必須使它們成為靜態的。 然后,您可以在不創建對象的情況下調用這些變量。
myClass.count;
因此,您要做的就是替換int count=0;
static int count=0;
還有幾件事可以改善您的編碼。
private
訪問修飾符一起使用。 (用於封裝) 這樣的事情應該可以解決問題:
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);
}
}
}
遞歸(方法本身調用)使您不必創建兩個方法,並且在'if語句'中使用arrayName.length可以避免如果決定擁有更大的數組集時就不必對條件進行硬編碼。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.