以另一种方法访问数组

时间:2015-04-10 00:19:20

标签: java arrays variables public

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

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循环中执行此操作,但有人可以解释如何以这种方式打印数组吗?我需要在一个初始化的单独方法中访问句子数组。我试图在程序的顶部创建一个数组实例,但它给出了一个错误说&#34;局部变量隐藏了一个字段&#34 ;

9 个答案:

答案 0 :(得分:1)

  

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

您已经有一个实例变量,因此请删除方法中的局部变量:

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

也不要像在for循环中那样使用魔术数字:

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

答案 1 :(得分:1)

您在方法 initializeArray()中声明变量 sentence [] 。因此,它不存在于此方法之外。一旦方法结束,它就会消失。其他方法无法使用变量。

您应该在方法之外声明变量,如下所示:

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。

答案 2 :(得分:0)

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);
}

答案 3 :(得分:0)

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

答案 4 :(得分:0)

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

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

第一种方法如下:

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 :(得分:0)

让您的initializeArray返回

中的数组
public String[] initializeArray () {

   ...
   return sentences;
}

printArray更改为

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

想象一下像

这样的主要方法
String myArr [] = initializeArray  ();
printArray (myArr);

答案 6 :(得分:0)

以下内容应该有效:

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 :(得分:0)

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 :(得分:0)

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);
    }
    }
}