2011-11-08 125 views
0

我對編程相當陌生,因此非常感謝layman的演講。將文件內容讀入2D陣列

我的任務是讀取一個文件的內容,它將包含9個值(3x3數組),然後將內容放入相應的索引中。

例如,

2D陣列的內容是...

1.00 -2.00 3.00 
4.00 1.00 -1.00 
1.00 2.00 1.00 

內容已被讀入後,需要對它們進行打印。然後程序會提示用戶輸入一個標量乘數,例如'4'。程序應該用新的輸出打印新的數組。

我現在有這個,

import java.io.*; 
import java.util.*; 


public class CS240Lab8a { 

/** 
* @param args the command line arguments 
*/ 
static double [][] matrix = new double[3][3]; 
static Scanner input = new Scanner(System.in); 


public static void main(String[] args) throws IOException 
{ 
    // Variables 
    String fileName = "ArrayValues.txt"; 




    // print description 
    printDescription(); 

    // read the file 
    readFile(fileName); 

    // print the matrix 
    printArray(fileName, matrix); 

    // multiply the matrix 
    multiplyArray(fileName, matrix); 


} 


// Program Description 
     public static void printDescription() 
     { 
      System.out.println("Your program is to read data from a file named ArrayValues.txt and store the values in a 2D 3 X 3 array. " 
        + "\nNext your program is to ask the user for a scalar multiplier \n" 
        + "which is then used to multiply each element of the 2D 3 X 3 array.\n\n"); 
     } 



// Read File 
     public static void readFile(String fileName) throws IOException 
     { 
      String line = ""; 

      FileInputStream inputStream = new FileInputStream(fileName); 
      Scanner scanner = new Scanner(inputStream); 
      DataInputStream in = new DataInputStream(inputStream); 
      BufferedReader bf = new BufferedReader(new InputStreamReader(in)); 

      int lineCount = 0; 
      String[] numbers; 
      while ((line = bf.readLine()) != null) 
      { 
       numbers = line.split(" "); 
       for (int i = 0; i < 3; i++) 
       { 
       matrix[lineCount][i] = Double.parseDouble(numbers[i]); 
       } 

       lineCount++; 
      } 
      bf.close(); 

     } 


// Print Array  
     public static void printArray(String fileName, double [][] array) 
     { 
      System.out.println("The matrix is:"); 

      for (int i = 0; i < 3; i++) 
       { 
        for(int j = 0; j < 3; j++) 
        { 
         System.out.print(matrix[i][j] + " "); 
        } 
        System.out.println(); 
       } 
      System.out.println(); 
     } 

     public static double multiplyArray(String fileName, double[][] matrix) 
     { 
       double multiply = 0; 

       System.out.println("Please enter the scalar multiplier to be used."); 
       multiply = input.nextDouble(); 

       for(int i = 0; i < 3; i++) 
       { 
        for(int j = 0; j < 3; j++) 
        { 
         matrix[i][j] 

       return multiply; 
      } 



} // end of class 

我現在有它打印陣列正常。

用常數(用戶輸入)乘以每個索引值的最佳方式是什麼?

+0

我看到的第一個問題是你沒有給矩陣分配任何東西。你實際上是在readFile方法中創建一個名爲matrix的NEW 2d數組。第二個問題是,在readFile方法中,你有矩陣[0] [0] =數字;在一個循環中...所以你只將值賦給矩陣的第一個位置。 –

+0

*「它接受第一行,但之後失敗。」*失敗如何?請明確點。順便說一句 - 你有問題嗎? –

+0

aleph_null - 你有建議如何將每個'double'存儲到索引中,使'double'=(x,y)索引?另外,如何在事先提交之後進入下一個索引? – fisherml

回答

2

您錯過了一個額外的步驟。

一旦你讀完這一行,你必須將單行和parseDouble分開。

此外,您的readFile不需要返回任何內容。只是讓你的矩陣變量全局。

+0

Kal,這有助於,但現在的輸出」矩陣是: 0.00.00.00.00.00.00.00.00.00.0「 – fisherml

+0

你正在printArray中聲明一個新的變量'matrix' ethod ..擺脫聲明,並使您的'矩陣'變量全局。在類定義的頂部聲明它。 – Kal

+0

我現在工作的很好,我正在移動數組的乘法。 – fisherml

0

好吧,我看着它的方式: 你把輸入文件的內容讀到一個字符串中。您已經有了逐行讀取的方法,只需將所有內容放入字符串中即可。

String content = readFile(input.txt); 

// Parse lines 

String[] lines = content.split("\n"); 

// Parses values 

for(int i = 0; i < lines.length; i++) { 
    // Get line values 
    String[] values = lines[i].split(" "); 
    for(int j = 0; j < values.length; j++) { 
     // Punt in Matrix 
     matrix[i][j] = Double.parseDouble(values[j]); 
    } 
} 
+0

Heineken,1)你在主要方法中使用'String content = readFile(input.txt)'嗎?如果是這樣,我已經嘗試將readFile存儲爲字符串,但由於readFile是無效方法,因此它會給出'不兼容的類型'。否則,你如何在'readFile'方法中調用'readFile'? – fisherml

+0

理想是讓你適應你的readFile返回一個字符串與文件內容。這很容易:P – Gabriel