有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

在java中为文本文件创建二维数组?

我必须导入一个包含单词和整数的文本文件,然后使用二维数组维护数据。我似乎不知道如何制作这个数组。我只能使用扫描仪、文件和FileNotFoundException导入。以下是我的代码片段:

public static void DisplayInventory() throws FileNotFoundException
{

    try
    {
        Scanner autoInventory = new Scanner(new File("records.txt"));

        for (int Num = 0; Num < 15; Num++)
        {
            String autoRecords = autoInventory.nextLine();
            autoRecords = autoRecords.replace(';', ' ');
            System.out.println(autoRecords);

        }

    }
    catch (FileNotFoundException except)
    {
        System.out.println("Error: Inventory read failure. Error " +
            except.getMessage());
        System.exit(-1);

    }

}

如您所见,这并不显示数组。我不确定如何做到这一点,已经在这几天了。我是java的新手,这是一项任务。我很感激你能给我的任何帮助


共 (2) 个答案

  1. # 1 楼答案

    我将做一些假设(可能不准确)。首先,您的文件如下所示(一个包含14行7列的csv):

    a1,b1,c1,d1,e1,f1,g1
    a2,b2,c2,d2,e2,f2,g2
    a3,b3,c3,d3,e3,f3,g3
    a4,b4,c4,d4,e4,f4,g4
    ..
    

    下一个假设是您的文件包含类型为String的值。在执行任何操作之前,我们需要声明2D数组:

    int numRecords = 14;
    int numColumns = 7;
    String[][] records = new String[numRecords][numColumns];
    

    您发布的代码尝试从扫描仪读取15行,在;上执行替换(不确定这是怎么回事),然后打印该行。这是一个很好的开始-这个循环负责读取每一行。我还要添加一个附加条件,检查是否有下一行(使用hasNextLine

    for (int i = 0; i < numRecords && autoInventory.hasNextLine(); i++)
    {
        String rowData = autoInventory.nextLine();
        String[] colData = rowData.split(",");
    
        for (int j=0; j<colData.length && j<numColumns; j++)
        {
            records[i][j] = colData[j];
        }
    }
    

    在这个外部循环中,我们首先使用nextLine收集rowData。接下来,我们使用split(字符串上的函数)将行分割为若干部分(由,分隔),将这些部分存储在1D数组中。我们声明第二个循环(内部循环),它在colData上循环-对于我们检查的每个值,我们将其放置在records数组中的适当位置

    现在,文件已经读入数组,您可以用类似的方式将其打印到屏幕上。使用外部循环(i)迭代行,使用内部循环(j)迭代列,打印出每个records[i][j]

    for (int i=0; i<numRecords; i++) 
    {
        for (int j=0; j<numColumns; j++) 
        {
            System.out.print(records[i][j]);
    
                                        // extra stuff..
            if (j != numColumns-1) {    // print commas between items if we want
                System.out.print(", ");
            }
        }
        System.out.println("");  // print out a newline after each row
    }
    
  2. # 2 楼答案

    我不完全清楚您要做什么,也不完全清楚为什么需要二维数组,但下面是如何创建数组和二维数组,以及如何使用for循环向它们添加数据。然而,我认为你不需要二维数组

    public static void DisplayInventory() throws FileNotFoundException
    {
    String[] sArray = new String[15]; //I'm assuming there are 15 values being added
    String[][] sArray2 = new String[10][10]; //Not sure how many are being added
    //Remember, make sure you don't use less space than you need.
    
        try
        {
            Scanner autoInventory = new Scanner(new File("records.txt"));
    
            for (int Num = 0; Num < 15; Num++)
            {
                String autoRecords = autoInventory.nextLine();
                autoRecords = autoRecords.replace(';', ' ');
                sArray[Num] = autoRecords;
                System.out.println(sArray[Num]);
            }
    

    我认为这应该足够了,因为我不相信你需要一个二维数组;似乎您尝试执行的操作可以使用常规数组进行管理。话虽如此,我仍然不完全清楚您要做什么,因此如果您确实需要使用二维数组,只需添加另一个for循环,并且在使用该数组时,可能(不一定)需要将第一个for循环的值保持在第一个括号内,第二个是嵌套的-如下所示:

    sArray2[Num][Num2];