2013-09-26 154 views
0

我正在研究一個程序,該程序要求我從文件中提取一維字符串數組並將其轉換爲二維數組。從文件中取數組的工作正常,但我無法獲得第二部分的工作。將一維字符串數組轉換爲二維字符數組

我正在使用的代碼是:

char[][] array2 = new char [7][5]; 

for (int i = 0; i < array1.length; i++) 
{ 
    array2[i]= array[i].toCharArray(); 
} 

for (int i = 0; i < 5; i++) 
{ 
    for (int j = 0; j < 7; j++) 
    { 
     System.out.println(array2[i][j]); 
    } 
} 

陣列應該在網格格式打印,但打印向下。

任何幫助表示讚賞,謝謝。

+0

哪有1D串被轉換爲2d字符數組? – blackpanther

+1

println在行尾打印換行符。使用print來打印而不換行 – njzk2

+0

要添加到@ njzk2的註釋中,請使用'j'循環內的'print'將一個字符串中的每個字符打印在一行中,然後緊跟在該循環塊後面,使用'println() ;'去下一個字符串/字符數組的新行。 – jonhopkins

回答

0

您正在使用println,這就是爲什麼每個字符都按自己的行打印的原因。您必須改用print

注意,如您所願,因爲內部陣列將被改寫

new char [7][5]; 

你的初始化不起作用。使用

new char[7][] 

對於相同的結果,但對於您的意圖更清晰。這裏

for (int i = 0; i < 5; i++) 
    for (int j = 0; j < 7; j++) 

你顯然已經逆轉索引的順序:您僅通過5個外部陣列迭代,但您已經分配7.你應該做的,而不是對抗的實際數組的長度檢查,而不是硬編碼的數字。內部數組可以是任何大小,畢竟(這取決於字符串長度)。

0

看一看在String.toCharArray()

如果向下打印,然後更改

for (int i = 0; i < 7; i++) //row loop 
    { 
    for (int j = 0; j < 5; j++) //column loop 
    { 
     System.out.print(array2[i][j]); 
    } 
    System.out.println(); //add here 
    } 

看一看

  1. formatting
  2. print vs println
+0

array1可能是一個String數組,這裏是 – njzk2

+0

@ njzk2:哦!我錯過了。謝謝先生。 –

2

在內循環中使用print而不是println,並且在每個循環之後打印一個空行println

for (int i = 0; i < 7; i++) // see changes 5/7. You did "new char[7][5]" not [5][7] 
{ 
    for (int j = 0; j < 5; j++) // see changes 7/5 
    { 
     System.out.print(array2[i][j]); 
    } 
    System.out.println(); 
} 

更新:

下面是一個轉換字符串數組二維字符數組的程序。

public class StringToChar { 
    public static void main(String[] args) { 
     String[] strArr = { "HELLO", "WORLD" }; 
     char[][] char2D = new char[strArr.length][]; 

     for (int i = 0; i < strArr.length; i++) { 
      char2D[i] = strArr[i].toCharArray(); 
     } 

     for (char[] char1D : char2D) { 
      for (char c : char1D) 
       System.out.print(c + " "); 

      System.out.println(); 
     } 
    } 
} 
+0

謝謝,你不會知道爲什麼即時通訊打印第一行後得到一個「java.lang.NullPointerException」? – user2817804

+0

@ user2817804查看我更新的答案。 – TheKojuEffect

+0

再次感謝,例外消失了。現在我只需要弄清楚爲什麼數組只打印出一行而忽略其餘部分。 – user2817804

1

一些建議,

  1. 取代char[][] array2 = new char [7][5];char[][] array2 = new char [array1.length][];(其中array1握着你的字符串),所以當你有一個字符串的二維數組將有儘可能多的行
  2. 你的循環
for (int i = 0; i < 5; i++) 
{ 
    for (int j = 0; j < 7; j++) 
.... 
} 

變化

for (int i = 0; i < array2.length; i++) 
{ 
    for (int j = 0; j < array2[i].length; j++) 
.... 

另一件事是,如果你想你的字符串印刷整齊,使用System.out.print,每當你完成內部循環,打印出'\n'字符

相關問題