2014-03-12 136 views
2

我試圖編寫一個程序來讀取數組的文件(以行作爲第一個字符,並將列作爲下一個字符排列,以及然後是一盒RxC術語),並試圖確定水平,垂直或對角線上相鄰的五個字符是否相同,顏色不同(在我的GUI主程序中)將讀取文件中的整數字符存儲到二維數組中

代碼非常慢,只適用於較小的陣列?我不明白我做錯了什麼。

文件是這樣的:

5 4 
1 2 3 4 5 
1 2 3 4 5 
7 3 2 0 1 
6 1 2 3 5 

代碼:

public class fiveinarow 
{ 
    int[][] Matrix = new int [100][100]; 
    byte[][] Tag = new byte [100][100]; 
    int row, col; 
    String filepath, filename; 

    public fiveinarow() 
    { 
    row = 0; 
    col = 0; 
    filepath = null; 
    filename = null; 
    } 

    public void readfile() 
    { 
    JFileChooser chooser = new JFileChooser(); 
    chooser.setDialogType(JFileChooser.OPEN_DIALOG); 
    chooser.setDialogTitle("Open Data File"); 

    int returnVal = chooser.showOpenDialog(null); 
    if(returnVal == JFileChooser.APPROVE_OPTION) 
    { 
     filepath = chooser.getSelectedFile().getPath(); 
     filename = chooser.getSelectedFile().getName(); 
    } 

    try 
    { 
      Scanner inputStream = new Scanner(new FileReader(filepath)); 
     int intLine; 
    row = scan.nextInt(); 
    col = scan.nextInt(); 
    for (int i=0; i < row; i++) 
      { 
     for (int j = 0 ; j < col; j++) 
     { 
         int[][]Matrix = new int[row][col]; 
      Matrix[i][j] = inputStream.nextInt(); 
        } 
    } 
} 


    catch(IOException ioe) 
    { 
     System.exit(0); 
    } 
    } 

當我計算出一個7x7的,我得到開放和處理的確認提供了全零的數組(7×7)。 當我計算15x14,我得到「在線程異常 「AWT-EventQueue的-0」 的錯誤和不陣列處理時

+0

你似乎有混合的行和列(如果你的示例數據是正確的數據)。你的例子有四行和五列 – ErstwhileIII

回答

1

一些建議。

  1. 創建一個返回int [] []的方法在您的輸入文件中讀取
  2. 讀取行和列後,在您的循環內部創建矩陣int [] [] result = new int [row] [column];
  3. 將每個整數讀入矩陣[i] [j] = scan.nextInt();

不要忘記掃描在一行」

您可能需要使用如所有的號碼後,移動到下一行:

import java.io.FileNotFoundException; 
import java.io.FileReader; 
import java.util.Scanner; 
import javax.swing.JFileChooser; 

public class ReadMatrix { 
static ReadMatrix mReadMatrix; 
int[][] matrix; 
int row, col; 
String filepath, filename; 

/** 
* @param args 
*/ 
public static void main(String[] args) { 
    mReadMatrix = new ReadMatrix(); 
    mReadMatrix.readfile(); 
} 

// int[][] Matrix = new int [100][100]; 
// byte[][] Tag = new byte [100][100]; 


public void readfile() { 
    JFileChooser chooser = new JFileChooser(); 
    chooser.setDialogType(JFileChooser.OPEN_DIALOG); 
    chooser.setDialogTitle("Open Data File"); 

    int returnVal = chooser.showOpenDialog(null); 
    if (returnVal == JFileChooser.APPROVE_OPTION) { 
     filepath = chooser.getSelectedFile().getPath(); 
     filename = chooser.getSelectedFile().getName(); 
    } 

    Scanner inputStream; 
    try { 
     inputStream = new Scanner(new FileReader(filepath)); 
     row = inputStream.nextInt(); 
     col = inputStream.nextInt(); 
     System.out.println(" matrix is " + row + " rows and " + col + " columns"); 
     matrix = new int[row][col]; 

     for (int i = 0; i < row; i++) { 
      for (int j = 0; j < col; j++) { 
       matrix[i][j] = inputStream.nextInt(); 
       System.out.println(" " + i + "," + j + ": " + matrix[i][j]); 
      } 
     } 
    } catch (FileNotFoundException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
} 
} 
+0

我修改'嘗試'到 'int [] [] Matrix = new int [row] [col];' 'Matrix [i] [j] = inputStream.nextInt() ;' 但它給了我一個全0的數組,並且不適用於更大的文件大小? – user3353932

+0

你能給我一個使用代碼的例子嗎?我不認爲我完全理解。 – user3353932

+0

代碼輸出到系統,當我需要它在gui中並傳遞給重新繪製陣列的驅動程序。 – user3353932

相關問題