从另一个方法调用方法,其中两个方法都在同一个类中

时间:2016-07-16 14:42:32

标签: java arrays methods method-call

我正在使用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()未被调用。可能的原因是什么?这是参数传递的问题吗?任何帮助表示赞赏。 =)

3 个答案:

答案 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。如果您决定使用更大的数组,将避免您必须硬编码。