2017-10-05 75 views
0

二維數組我看了關於這一主題的線程,但我沒能解決我所面臨的與初始化for循環中的多個一維數組二維int數組的問題。JAVA:正開始從一維數組中的for循環

下面是我的代碼片段,其不如下:

  1. 讀取STD輸入字符串的一行。
  2. 轉換此行成一維int數組(通過劃分字符串)
  3. 填充二維數組的行,每一維數組順序

限制條件:

  1. 的輸入的大小是已知的(行數和列數),它將始終爲整數。

    Scanner in = new Scanner(System.in); 
    String[] line = new String[8]; 
    String[] rows = new String[7]; 
    int[] row_int = new int[7]; 
    
    int player=0,j=0; 
    
    for (int i =0; i <3 ;++i) { 
        line[i] = in.nextLine(); 
        System.out.println("REading ..."+line[i]); 
        rows = line[i].split("\\s+"); 
        j=0; 
        for (String s : rows) { 
         row_int[j]=Integer.parseInt(s); 
         j++; 
        } 
        input[i]=row_int; 
        System.out.println(Arrays.toString(row_int)+" for the value of i "+i); 
        System.out.println("The Array is \n"+Arrays.deepToString(input)); 
    } 
    

我現在面臨的問題是二維數組的值被覆蓋,每一次新一維數組的值: 下面是一個示例輸出:

1 2 3 4 
REading ...1 2 3 4 
[1, 2, 3, 4, 0, 0, 0] for the value of i 0 
The Array is 
[[1, 2, 3, 4, 0, 0, 0], 
[0, 0, 0, 0, 0, 0, 0], 
[0, 0, 0, 0, 0, 0, 0], 
[0, 0, 0, 0, 0, 0, 0], 
[0, 0, 0, 0, 0, 0, 0], 
[0, 0, 0, 0, 0, 0, 0], 
[0, 0, 0, 0, 0, 0, 0]] 

4 5 6 
REading ...4 5 6 
[4, 5, 6, 4, 0, 0, 0] for the value of i 1 
The Array is 
[[4, 5, 6, 4, 0, 0, 0], 
[4, 5, 6, 4, 0, 0, 0], 
[0, 0, 0, 0, 0, 0, 0], 
[0, 0, 0, 0, 0, 0, 0], 
[0, 0, 0, 0, 0, 0, 0], 
[0, 0, 0, 0, 0, 0, 0], 
[0, 0, 0, 0, 0, 0, 0]] 

33 44 55 
REading ...33 44 55 
[33, 44, 55, 4, 0, 0, 0] for the value of i 2 
The Array is 
[[33, 44, 55, 4, 0, 0, 0], 
[33, 44, 55, 4, 0, 0, 0], 
[33, 44, 55, 4, 0, 0, 0], 
[0, 0, 0, 0, 0, 0, 0], 
[0, 0, 0, 0, 0, 0, 0], 
[0, 0, 0, 0, 0, 0, 0], 
[0, 0, 0, 0, 0, 0, 0]] 

縮進輸出爲了更好的可讀性。

請建議,如果有更好的方法來初始化與一維數組二維數組。

+0

將'row_int'的初始化(也是聲明)移動到外部'for'循環中... –

+0

Usagi是對的:您在'for'循環的每次迭代中重新使用'row_int'。您需要每次創建一個新的int行。 – dave

+0

謝謝你們..作品 – eshi14

回答

0
Scanner in = new Scanner(System.in); 
String[] line = new String[8]; 
String[] rows = new String[7]; 


int player=0,j=0; 

for (int i =0; i <3 ;++i) { 
line[i] = in.nextLine(); 
System.out.println("REading ..."+line[i]); 
rows = line[i].split("\\s+"); 
j=0; 
int[] row_int = new int[7]; //reinitializing the variable on each loop 
for (String s : rows) { 
    row_int[j]=Integer.parseInt(s); 
    j++; 
} 
input[i]=row_int; 
System.out.println(Arrays.toString(row_int)+" for the value of i "+i); 
System.out.println("The Array is \n"+Arrays.deepToString(input)); 
} 

你的問題是,row_int變量的內存在每個循環上重複使用。因此,每次將值存儲在row_int數組中時,您都將值設置爲所有參考值。您需要爲每個循環重新初始化它們。這應該解決這個問題。

+0

ahhh ..所以,當我初始化2d數組的行時,它實際上只是對內存中1d數組位置的引用。謝謝 .. – eshi14