用另一种方法访问数组

Posted

技术标签:

【中文标题】用另一种方法访问数组【英文标题】: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() 方法吗? 【参考方案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);
    
    

【讨论】:

以上是关于用另一种方法访问数组的主要内容,如果未能解决你的问题,请参考以下文章

如何从另一种方法访问 tableviewCell 中的文本字段

UDF 制作一种替代数组函数

(C)结构数组

(C)结构数组

python Python方法用另一种模式替换模式,在字符串中找到

用另一种颜色显示 System.out.println 输出