用另一种方法访问数组
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 是按值传递的,它要求您将一条数据的值按字面意思提供给一个方法,以便该方法对其进行处理。全局值基本上是每个对象都知道的值。
因此,您需要一些东西来告诉initializeArray
和printArray
有这段数据语句需要处理。
// 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 中的文本字段