【问题标题】:Accessing an array in another method用另一种方法访问数组
【发布时间】:2015-06-15 13:44:35
【问题描述】:

我正在尝试在一个单独的方法中访问一个数组,它被初始化。

public void initializeArray()
{                
    String sentences[] = new String[5];

    for(int i=0; i<5; i++)
    { 
        sentences[i] = i+1;
    }
}

public void printArray()
{
    for(int i=0; i<5; i++)
    {
        System.out.println(sentences[i]);
    }
}

我知道我可以在一个 for 循环中执行此操作,但有人可以解释我如何以这种方式打印数组吗?我需要在初始化它的单独方法中访问语句数组。我试图在程序顶部创建一个数组实例,但它给了我一个错误,说“局部变量隐藏了一个字段”。

【问题讨论】:

  • 根据您提供的代码,句子数组的作用域是 initializeArray() 方法。您确定不想将数组从初始化传回或传给 printArray() 方法吗?

标签: java arrays variables public


【解决方案1】:

printArray 方法的签名更改为

public void printArray(String[] sentences){...}

所以你有

public void initializeArray(){
   int arraySize = 5;
   String[] sentences = new String[arraySize];
   for(int i=0; i<arraySize; i++){
        sentences[i] = new String(i+1);
   }
   printArray(sentences);
}

【讨论】:

    【解决方案2】:

    使句子成为两个函数的全局变量或参数。

    【讨论】:

      【解决方案3】:

      我试图在程序顶部创建一个数组实例,但是 它给了我一个错误,说“局部变量隐藏了一个字段”。

      你已经有一个实例变量,所以删除方法中的局部变量:

      public void initializeArray()
      {                
          //String Sentences[] = new String[5];
          ...
      }
      

      也不要像在 for 循环中那样使用幻数:

      for(int i=0; i<5; i++)//use `sentences.length` instead of `5`
      

      【讨论】:

        【解决方案4】:

        有两种方法可以从两种方法访问同一个数组:

        • 通过数组类型的实例变量访问数组,或者
        • 将数组作为参数传递给方法。

        第一种方法如下所示:

        class TestInstanceVar {
            private String[] sentences = new String[5];
            public static void main(String[] args) {
                TestInstanceVar obj = new TestInstanceVar();
                obj.initializeArray();
                obj.printArray();
            }
            public void initializeArray() {
                ...
            }
            public void printArray() {
                ...
            }
        }
        

        在这里,方法访问sentences 作为实例变量,在同一实例上运行的所有方法共享。

        第二种方法如下所示:

        class TestPassArray {
            public static void main(String[] args) {
                private String[] sentences = new String[5];
                initializeArray(sentences);
                printArray(sentences);
            }
            public static void initializeArray(String[] sentences) {
                ...
            }
            public static void printArray(String[] sentences) {
                ...
            }
        }
        

        这里的数组是在main 方法中创建的,并作为参数显式传递给初始化和打印方法。请注意,这些方法标记为static,无需创建对象即可访问。

        【讨论】:

          【解决方案5】:

          让您的 initializeArray 返回一个数组,如下所示

          public String[] initializeArray () {
          
             ...
             return sentences;
          }
          

          将您的printArray 更改为

          public void printArray (String [] arr) {
             ...
             System.out.println(arr[i]);
          }
          

          想象一个 main 方法,比如

          String myArr [] = initializeArray  ();
          printArray (myArr);
          

          【讨论】:

          • 当然,我经常有这样的错别字。
          【解决方案6】:

          以下应该有效:

          class MyClass
          {
          
              private String sentences[] = new String[5];
          
              public void initializeArray()
              {                
                  for(int i=0; i<5; i++)
                  { 
                      sentences[i] = i+1;
                  }
              }
          
              public void printArray()
              {
                  for(int i=0; i<5; i++)
                  {
                      System.out.println(sentences[i]);
                  }
              }
          }
          

          【讨论】:

            【解决方案7】:

            printArray 方法对句子一无所知,对吧?

            Java 是按值传递的,它要求您将一条数据的值按字面意思提供给一个方法,以便该方法对其进行处理。全局值基本上是每个对象都知道的值。

            因此,您需要一些东西来告诉initializeArrayprintArray 有这段数据语句需要处理。

            // A Calling Function
            public void initializeAndPrintStringArray
            {
                // Get the initialized Sentences Array
                String[] sentences = initializeArray();
            
                // Print this Initialized Array
                printArray(sentences)
            }
            
            // For doing this, you need to change the definitions of your methods
            
            public String[] initializeArray()
            {                
                String[] sentences = new String[5]; // You have a spelling mistake here
            
                for(int i=0; i<5; i++)
                { 
                    sentences[i] = i+1;
                }
                return sentences
            }
            
            public void printArray(String[] sentences)
            {
                // Don't assume the length will always be 5 or something you know beforehand.
                for(int i=0; i<sentences.length; i++) 
                {
                    System.out.println(sentences[i]);
                }
            }
            

            【讨论】:

              【解决方案8】:

              您在方法 initializeArray() 中声明了变量 sentences[]。因此,它在此方法之外不存在。一旦方法完成,它就会消失。其他方法不能使用该变量。

              你应该在方法外声明变量,像这样:

              public class Example {
              
                  static String sentences[] = new String[5];;
              
                  public static void main(String[] args) {
                      initializeArray();
                      printArray();
                  }
              
                  public static void initializeArray() {
                      for (int i = 0; i < 5; i++) {
                          sentences[i] = "" + (i + 1);
                      }
                  }
              
                  public static void printArray() {
                      for (int i = 0; i < 5; i++) {
                          System.out.println(sentences[i]);
                      }
                  }
              }
              

              这样,您可以在本课程的任何地方使用它。如果您也想在其他地方使用它,请在其前面添加关键字 public。

              【讨论】:

                【解决方案9】:
                public class Main {
                
                    static void add(int[] array1) {
                        int sum = 0;
                        for (int i = 0; i < array1.length; i++) {
                            sum += array1[i];
                        }
                        System.out.println(sum);
                    }
                         static void sub(int[] array2){
                            int sum=0;
                            for(int j=0;j< array2.length;j++) {
                                sum-=array2[j];
                            }
                            System.out.println(sum);
                        }
                
                
                
                        public static void main(String[] args) {
                        Scanner input=new Scanner(System.in);
                            System.out.print("Enter the number of int that u r gonna enter = ");
                        int num= input.nextInt();
                        int Mainarray[]= new int[num];
                            System.out.println("Enter the elements = ");
                        for(int i=0;i<num;i++){
                            Mainarray[i]= input.nextInt();
                        }
                        System.out.println("ENTER 1 TO ADD"+"\n"+"ENTER 2 TO SUBTRACT");
                        int num2= input.nextInt();
                        if(num2==1) {
                            add(Mainarray);
                        }else if(num2==2){
                            sub(Mainarray);
                    }
                    }
                }
                

                【讨论】:

                  猜你喜欢
                  • 1970-01-01
                  • 2021-08-11
                  • 1970-01-01
                  • 2020-06-16
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 2015-12-20
                  相关资源
                  最近更新 更多