我認爲我的問題在這裏是一個愚蠢的,語法問題,但它在這裏。我正在編寫一個程序,它使用CSV文件,它是3行,每行4列數字。我在運行時將該文件作爲參數,然後分割爲換行符(\ n),然後在逗號分隔符處進行拆分。然後我將它存儲到String類型的「2D數組」中。然後,我取每個值,解析爲雙倍,並填充第二個「2D陣列」,但這次是雙倍。一切都很好。一個類中的數字格式例外
我的問題是,當我試圖把所有的代碼,並把它放入它自己的類。我向main添加了一個構造函數,並在類中複製並粘貼了以前的代碼。但是現在,當從字符串解析爲double時,從第4個元素到第5個元素時,我得到NumberFormatException。完全相同的代碼在主代碼中編碼時工作。
我認爲我的課程知識是我的問題。
這裏是我製作類:
import java.lang.*;
public class DataMatrix {
private double[][] dMatrix;
public DataMatrix(String text) {
String[] line = text.split("\n");
// Creates an array for the CSV file
String[][] sMatrix = new String[line.length][];
for(int i=0; i < line.length; i++)
sMatrix[i] = text.split(",");
System.out.println("Original String: ");
for(int x=0; x < sMatrix.length; x++) {
for(int j=0; j <= line.length; j++) {
System.out.println(sMatrix[x][j]);
}
}
double[][] dMatrix = new double[sMatrix.length][];
System.out.println("Converted to double: ");
for(int x=0; x < sMatrix.length; x++) {
dMatrix[x] = new double[sMatrix[x].length];
for(int j=0; j <= sMatrix.length; j++) {
dMatrix[x][j] = Double.parseDouble(sMatrix[x][j]);
System.out.println(dMatrix[x][j]);
}
}
}
}
這裏是我的主(忽略的意見,使用他們當我複製/粘貼的東西出來吧):
import java.lang.*;
public class Assignment1{
public static void main(String[] args){
// DecimalFormat df = new DecimalFormat("#.##");
//Make sure the user passed the command line argument - and nothing else
if (args.length != 1){
System.out.println("Assignment1 takes exactly one command-line argument.");
System.out.println("Usage: java Assignment1 some_file.csv");
System.exit(0);
}
String csvFileName = args[0];
//Instantiate my custom file reader
CSVReader fileReader = new CSVReader();
//Read the file into a string
String text = fileReader.readFile(csvFileName);
DataMatrix matrix = new DataMatrix(text);
}//end of main
}//end of class
編輯:這裏我的輸出:
Files contents:
1,2,3,4
3,4,1,0
2,3,4,2
Original String:
1
2
3
4
3
4
1
0
2
3
4
2
Converted to double:
1.0
2.0
3.0
Exception in thread "main" java.lang.NumberFormatException: For input string: "4 3"
at sun.misc.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:1250)
at java.lang.Double.parseDouble(Double.java:540)
at DataMatrix.<init>(DataMatrix.java:30)
at Assignment1.main(Assignment1.java:22)
提供失敗的csv輸入行。爲了更容易地重現錯誤,臨時添加調試輸出 String doubleString = sMatrix [x] [j]; 嘗試Double.parseDouble(doubleString); (NumberFormatException e){System.out.println(「NFE on:」+ doubleString); } – JanPl
是不是這行'sMatrix [i] = text.split(「,」);'應該是'sMatrix [i] = line [i] .split(「,」);'? –
編輯我的帖子以顯示輸出錯誤。 –