在Java中调用方法内部的另一个方法

在Java中调用方法内部的另一个方法,java,methods,Java,Methods,我正在做一个关于方法和一维数组的练习。我在一个方法下创建了一个数组。如何在其他方法下使用该数组?例如,我在第一种方法中确定了一些标识,第二种方法将使用这些标识从这些标识中提取一些特征。假设在这段代码中写“xyz”的次数越多,我将使它们的运行状况增加1。只需在方法声明之外声明字符串[];设置其维度是无用的: String[] IDs = new String[]{}; 您可能也不需要这些静态关键字。只需在方法声明之外声明字符串[];设置其维度是无用的: String[] IDs = new St

我正在做一个关于方法和一维数组的练习。我在一个方法下创建了一个数组。如何在其他方法下使用该数组?例如,我在第一种方法中确定了一些标识,第二种方法将使用这些标识从这些标识中提取一些特征。假设在这段代码中写“xyz”的次数越多,我将使它们的运行状况增加1。

只需在方法声明之外声明
字符串[]
;设置其维度是无用的:

String[] IDs = new String[]{};

您可能也不需要这些
静态
关键字。

只需在方法声明之外声明
字符串[]
;设置其维度是无用的:

String[] IDs = new String[]{};

您可能也不需要这些
静态
关键字。

问题在于,数组ID当前是方法总体的局部变量

以下是关于Java中作用域中变量的一些要点:

  • 通常,一组花括号{}定义了一个作用域
  • 在任何方法之外的类中定义的任何变量都可以由所有成员方法使用
  • 在Java中,我们通常可以访问变量,只要它是在与我们正在编写的代码相同的一组括号内定义的,或者是在定义变量的花括号内的任何花括号内定义的
范围意味着变量只能在其创建的区域内访问

这里有一个例子来说明这种行为

public class Main {
  public static void main(String[] args) {

    // Code here CANNOT use x

    { // This is a block

      // Code here CANNOT use x

      int x = 100;

      // Code here CAN use x
      System.out.println(x);

   } // The block ends here

  // Code here CANNOT use x

  }
}
在您的情况下,您可以在填充方法之外的“更高范围”中定义id

public class L {
    public static String[] IDs = new String[n];

        public static void main(String[] args) {
            
            
        
}
        public static void population(int n){
            String[] letter = {"x","y","z"};
            for (int j=0; j<n; j++){
                IDs[j] = "";
                for (int i=0; i<128; i++){
                    Random rand = new Random();
                    int w = rand.nextInt(letter.length);
                    IDs[j]+=letter[w];
                }
            }
        }

         private static void calculateHealth(int health) {
            population(health);
            health =0;

            for (int i=2; i<128; i++){
                if (IDs[i-2].equals("X") && IDs[i-1].equals("Y") && IDs[i].equals("Z")) {
                    health+=1;
                }
            }
            System.out.println(health);;
        }
}
公共类L{
公共静态字符串[]id=新字符串[n];
公共静态void main(字符串[]args){
}
公共静态空总体(整数n){
字符串[]字母={“x”,“y”,“z”};

对于(int j=0;j而言,问题在于数组ID当前是方法总体的局部变量

以下是关于Java中作用域中变量的一些要点:

  • 通常,一组花括号{}定义了一个作用域
  • 在任何方法之外的类中定义的任何变量都可以由所有成员方法使用
  • 在Java中,我们通常可以访问变量,只要它是在与我们正在编写的代码相同的一组括号内定义的,或者是在定义变量的花括号内的任何花括号内定义的
范围意味着变量只能在其创建的区域内访问

这里有一个例子来说明这种行为

public class Main {
  public static void main(String[] args) {

    // Code here CANNOT use x

    { // This is a block

      // Code here CANNOT use x

      int x = 100;

      // Code here CAN use x
      System.out.println(x);

   } // The block ends here

  // Code here CANNOT use x

  }
}
在您的情况下,您可以在填充方法之外的“更高范围”中定义id

public class L {
    public static String[] IDs = new String[n];

        public static void main(String[] args) {
            
            
        
}
        public static void population(int n){
            String[] letter = {"x","y","z"};
            for (int j=0; j<n; j++){
                IDs[j] = "";
                for (int i=0; i<128; i++){
                    Random rand = new Random();
                    int w = rand.nextInt(letter.length);
                    IDs[j]+=letter[w];
                }
            }
        }

         private static void calculateHealth(int health) {
            population(health);
            health =0;

            for (int i=2; i<128; i++){
                if (IDs[i-2].equals("X") && IDs[i-1].equals("Y") && IDs[i].equals("Z")) {
                    health+=1;
                }
            }
            System.out.println(health);;
        }
}
公共类L{
公共静态字符串[]id=新字符串[n];
公共静态void main(字符串[]args){
}
公共静态空总体(整数n){
字符串[]字母={“x”,“y”,“z”};
对于(intj=0;j有两件事
1-正如alex提到的
第二,您可以在该函数中创建数组

public static String[] population(int n){
    String[] IDs = new String[n];
    String[] letter = {"x","y","z"};
    for (int j=0; j<n; j++){
        IDs[j] = "";
        for (int i=0; i<128; i++){
            Random rand = new Random();
            int w = rand.nextInt(letter.length);
            IDs[j]+=letter[w];
        }
    }
    return IDs;
}

 private static void calculateHealth(int health) {
    String[] Ids = population(health);
    health =0;

    for (int i=2; i<128; i++){
        if (IDs[i-2].equals("X") && IDs[i-1].equals("Y") && IDs[i].equals("Z")) {
            health+=1;
        }
    }
    System.out.println(health);;
}
公共静态字符串[]填充(int n){
字符串[]id=新字符串[n];
字符串[]字母={“x”,“y”,“z”};
对于(intj=0;j有两件事
1-正如alex提到的
第二,您可以在该函数中创建数组

public static String[] population(int n){
    String[] IDs = new String[n];
    String[] letter = {"x","y","z"};
    for (int j=0; j<n; j++){
        IDs[j] = "";
        for (int i=0; i<128; i++){
            Random rand = new Random();
            int w = rand.nextInt(letter.length);
            IDs[j]+=letter[w];
        }
    }
    return IDs;
}

 private static void calculateHealth(int health) {
    String[] Ids = population(health);
    health =0;

    for (int i=2; i<128; i++){
        if (IDs[i-2].equals("X") && IDs[i-1].equals("Y") && IDs[i].equals("Z")) {
            health+=1;
        }
    }
    System.out.println(health);;
}
公共静态字符串[]填充(int n){
字符串[]id=新字符串[n];
字符串[]字母={“x”,“y”,“z”};

对于(int j=0;jI)不知道在哪里“创建了一个数组”你能详细说明一下你想在这里做什么吗?我看到的唯一数组是
IDs
,它似乎已经创建好了。
IDs
在你的方法中的任何地方都没有声明,所以你可以从同一个类中的另一个方法访问它,就像你在
calculateHealth
中访问它一样。好吧,这样这个代码就不会编译了le.当你遇到这样的问题时,我们也需要错误消息的全文。在某个地方有一个帖子,所以“为什么‘有人能帮我吗?’不是问题。”这就是问题。更改
population
以返回
String[]
而不是返回
void
,并从
calculateHealth
调用它,比如
String[]IDs=population(health);
然后您将拥有由一个方法在另一个方法中创建的数组。我看不到您在哪里“创建了数组”你能详细说明一下你想在这里做什么吗?我看到的唯一数组是
IDs
,它似乎已经创建好了。
IDs
在你的方法中的任何地方都没有声明,所以你可以从同一个类中的另一个方法访问它,就像你在
calculateHealth
中访问它一样。好吧,这样这个代码就不会编译了le.当你遇到这样的问题时,我们也需要错误消息的全文。在某个地方有一个帖子,所以“为什么‘有人能帮我吗?’不是问题。”这就是问题。更改
population
以返回
String[]
而不是返回
void
,并从
calculateHealth
调用它,如
String[]IDs=population(health)
然后您将拥有由另一个方法中的一个方法创建的数组。最好将其作为参数传递给另一个方法。最好将其作为参数传递给另一个方法。我不确定是否告诉新手增加变量的范围,而不是告诉他们如何将其作为参数传递r是一件很好的事情,虽然很明显你可以用任何一种方法来解决这个问题。@DavidConrad作为参数传递也是一个很好的选择。但是我不认为你在这里选择哪种方法和通过接触哪种作用域的方式有太大的区别,因为理解和了解什么也是可以传递的是很重要的对于其他编程语言来说,理解作用域当然很重要。编写不依赖于未传入状态的引用透明代码,并保持