2011-11-08 63 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