簡體   English   中英

從另一個都屬於同一類的方法中調用一個方法

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM