2011-04-30 62 views
0

我是JAVA的新手,發現它的一些概念非常刺激,無論我多麼努力地嘗試,我都無法找到適合這種行爲的解釋......當然有這些問題但我仍然想知道我在這裏錯過了一些非常簡單的東西,或者JAVA是這樣的?Java中的字符串的奇怪問題

  1. 我在我的類A中有一個字符串數組,我希望它通過另一個類B的方法來填充......所以我創建了一個類B的對象到A中並調用方法B. xyz並將其等同於字符串陣列但BOOM我不能這樣做...... java拋出一個空指針異常..........我不知道爲什麼...

public class B{ 
    public void xyz() { 
     String[] mystrings=new String[70]; 
     for(int i=0;i<5;i++) 
      mystrings[i]=value;  
     return mystrings; 
    } 
} 

public class A { 
    public void abc() { 

     B b=new B(); 
     String[] StringList; 
     StringList=b.xyz(); 
     System.out.println(StringList.length); 
    } 
} 

我現在有一個類似的代碼片段StrinList可悲的是長度爲70 ....如果我想打印這個數組我沒有任何其他方式的所有字符串....記住,即使在B類中mystring的大小是70,只有5個組件被正確初始化........考慮到我在A類中,無法找出B中執行for循環的次數。 .....我如何精確地循環遍歷A中的所有StringList元素.........

PS:有解決方法可以解決這個問題,但我想知道爲什麼會發生這種情況,即爲什麼長度屬性不會根據初始化的組件而改變?

+0

您可能不希望「將B類的對象創建爲A」,而是想要引用處於活動狀態的A對象。爲了獲得更好的幫助,請考慮發佈已格式化的代碼,以便我們可以閱讀它。 – 2011-04-30 21:28:54

+1

你的代碼不能編譯。我不確定你是如何執行它的。 「String [] mystrings [70];」是不正確 – fmucar 2011-04-30 21:32:17

+1

編輯刪除通過引用標記傳遞,你沒有任何地方傳遞任何東西。 – debracey 2011-04-30 21:32:59

回答

4

如果您只需要長度爲5的數組則僅初始化爲大小,例如:

public String[] xyz(String value) { 
    String[] mystrings = new String[5]; 
    for (int i = 0; i < mystrings.length; i++) { 
     mystrings[i] = value; 
    } 
    return mystrings; 
} 

如果你想要一個數組,你可以擴大你應該考慮使用ArrayList代替。例如: -

public List<String> abc(String value) { 
    List<String> list = new ArrayList<String>(); 
    for (int i = 0; i < 5; i++) { 
     list.add(value); 
    } 
    return list; 
} 

然後你就可以得到它的大小,添加到它,並打印這樣的元素:

List<String> list = abc("foo"); 
System.out.println(list.size()); 
list.add("bar"); 
for (String value : list) { 
    System.out.println(value); 
} 

希望有所幫助。

0
String[] mystrings = new String[5]; 
1

您聲明xyz爲類void中類B的返回類型。想必你想要一個簽名,返回一個字符串數組,public String[] xyz()

你也沒有B中正確聲明數組,正確的聲明是:

String[] myStrings = new String[70];

- 丹

0

我建議你看看像ArrayList一樣使用List,因爲它包裝了數組,使它們更易於使用。

String[] mystrings[70]; 

這創建了一個數組或多個數組。有兩個[]

我建議你試試。

String[] mystrings = new String[5];