我想将普通文本文件读入双数组。文本文件采用以下格式(除了行之间没有空格):
5,1,1,1,2,1,3,1,1,2
5,4,4,5,7,10,3,2,1,4
3,1,1,1,2,2,3,1,1,2
6,8,8,1,3,4,3,7,1,4
4,1,1,3,2,1,3,1,1,2
然而,当将其读入数组时,我希望将前9个属性设置为十进制(如果本身(基本上除以10)),将最后一个数字(2或4)分离为#34;列"当它为2时,如果它是4,则将0输入到2D阵列的第10列,将1输入到第11列,反之亦然。 从本质上讲,我希望它的格式看起来像这样:
{0.5, 0.1, 0.1, 0.1, 0.2, 0.1, 0.3, 0.1, 0.1, 0, 1},
{0.5, 0.4, 0.4, 0.5, 0.7, 1, 0.3, 0.2, 0.1, 1, 0},
非常感谢任何帮助。
for (String str : values) {
double str_double = Double.parseDouble(str);
myDouble[x][y]=str_double/10;
System.out.print(myDouble[x][y] + " ");
y = y + 1;
}
答案 0 :(得分:0)
As a good answer explains what have been done, I tried to comment the most important parts, including the file IO.
Please be aware of the difference between:
result.length
and result[row].length
.
One gives you the length of the one dimension of the array, while the second gives you the dimension of the array contained in a specific position of the 2D array.
In Java, a multidimensional Array is defined as a "jagged" array, as the internal arrays can be of different sizes.
See if this answer clarifies what you need, and ask if you have any further questions.
EDIT: Corrected code to meet specifications from the question. Please run to verify the desired output.
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
public class Example {
private static final String DELIMITER = ",";
private static final int LINE_COUNT = 5;
private static final int COL_COUNT = 11;
public static void main (String[] argv) {
//Create a reference to the file
File incoming = new File("C:\\DEV\\input_file.txt");
try {
//Create the components to read the file
FileReader fr = new FileReader(incoming);
BufferedReader br = new BufferedReader(fr);
String line = "";
String[] splitLine;
/*Can have your program read the file to count lines and assign proper size instead of hardcode*/
double[][] result = new double[LINE_COUNT][COL_COUNT];
//Count the line being processed
int row = 0;
//This reads each line of the file
while ((line = br.readLine()) != null) {
//Splits the line around delimiter (,)
splitLine = line.split(DELIMITER);
//Iterates across the array of elements split from the string line
for (int col = 0; col < splitLine.length; col++) {
//In case the element is the last
if (col == splitLine.length - 1) {
//Select the desired behavior
if (splitLine[col].equals("2")) {
result[row][col] = 0;
result[row][col + 1] = 1;
} else if (splitLine[col].equals("4")) {
result[row][col] = 1;
result[row][col + 1] = 0;
}
} else {
//Otherwise, assign the value divided by 10
result[row][col] = Double.parseDouble(splitLine[col]) / 10;
}
}
//Increases the rowcount
row++;
}
//Closes the resource - You can research about "try with resources for automatic closing"
br.close();
fr.close();
//Test
for (int i = 0; i < result.length; i++) {
System.out.print("{");
for (int j = 0; j < result[i].length; j++) {
System.out.print(result[i][j]);
if (j != result[i].length - 1) {
System.out.print(",");
}
}
System.out.print("}");
if (i != result.length - 1) {
System.out.print(",");
}
}
} catch (IOException e) {
//Print error if file not found
System.out.println("Can't read the file");
}
}
}