我必须导入包含单词和整数的文本文件,然后使用二维数组维护数据。我似乎无法弄清楚如何制作这个数组。我可以使用的唯一导入是Scanner,File和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的新手,这是一个任务。我感谢您给予的任何帮助。
答案 0 :(得分: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];
}
}
在这个外部循环中,我们首先使用rowData
收集nextLine
。接下来,我们使用split
(String上的函数)将行拆分为多个部分(由,
分隔),将这些部分存储在一维数组中。我们声明了循环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
}
答案 1 :(得分:0)
我并不完全清楚你想要做什么或为什么你需要一个二维数组,但这里是如何创建一个数组和一个二维数组,以及如何向它们添加数据带有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];