【问题标题】:Reading contents of a file into a 2D array将文件内容读入二维数组
【发布时间】:2011-12-24 02:54:24
【问题描述】:

我对编程还很陌生,所以很欣赏外行的谈话。

我的任务是读取一个文件的内容,该文件将包含 9 个值(3x3 数组),然后将内容放在相应的索引中。

例如,

二维数组的内容是……

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

我目前正在正确打印数组。

将每个索引值乘以常数(用户输入)的最佳方法是什么?

【问题讨论】:

  • 我看到的第一个问题是你没有为矩阵分配任何东西。您实际上是在 readFile 方法中创建一个名为 matrix 的新二维数组。第二个问题是,在 readFile 方法中,你有 matrix[0][0] = numbers;在一个循环中......所以你只将值分配给矩阵的第一个位置。
  • “它接受第一行,但之后失败。”失败怎么办?请明确点。顺便说一句 - 你有问题吗?
  • aleph_null - 您对如何将每个“双”存储到索引中以使“双”=(x,y)索引有什么建议吗?另外,在提交之前的索引后如何进入下一个索引?
  • Andrew Thompson - 我收到的错误如下 - “线程“主”java.lang.NumberFormatException 中的异常:对于输入字符串:sun.misc.FloatingDecimal.readJavaFormatString 处的“1.00 -2.00 3.00” (FloatingDecimal.java:1241) 在 java.lang.Double.parseDouble(Double.java:540) 在 CS240Lab8a.readFile(CS240Lab8a.java:63) 在 CS240Lab8a.main(CS240Lab8a.java:32) Java 结果:1" -我的问题在底部 (1,2,3) - 如何完成这些任务

标签: java arrays io


【解决方案1】:

你在这里少了一个额外的步骤。

一旦您阅读了该行,您就必须拆分该行并对单个数字进行 parseDouble。

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

    lineCount++;
}

此外,您的 readFile 不需要返回任何内容。只需将您的矩阵变量设为全局变量即可。

【讨论】:

  • Kal,这有帮助,但现在的输出是“矩阵为:0.00.00.00.00.00.00.00.00.0”
  • 您在 printArray 方法中声明了一个新变量 matrix .. 摆脱声明并使您的 matrix 变量全局化。在类定义的顶部声明它。
  • 我现在可以正常工作了,我正在处理数组的乘法。
  • 很高兴你这样做。如果任何答案有帮助,请记得将其标记为正确答案。
【解决方案2】:

好的,我的看法是: 您将输入文件的内容读取为字符串。您已经有了逐行读取的方法,只需将所有内容放在一个字符串中即可。

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]);
    }
}

【讨论】:

  • Heineken, 1) 你在 main 方法中使用 'String content = readFile(input.txt)' 吗?如果是这样,我尝试将 readFile 存储为字符串,但它给出了“不兼容的类型”,因为 readFile 是一个 void 方法。不然怎么在‘readFile’方法中调用‘readFile’?
  • 这个想法是让您调整您的 readFile 以返回包含文件内容的字符串。这很容易:P
猜你喜欢
  • 1970-01-01
  • 2014-04-06
  • 2014-09-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-11
相关资源
最近更新 更多