Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/326.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 从另一个方法调用一个方法,其中两个方法都在同一个类中_Java_Arrays_Methods_Method Call - Fatal编程技术网

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。