Java 从文件输入邻接矩阵

Java 从文件输入邻接矩阵,java,file,file-io,java.util.scanner,adjacency-matrix,Java,File,File Io,Java.util.scanner,Adjacency Matrix,我试图以邻接矩阵的形式将以下文件输入到我的程序中 16 -1,1075,716,792,1425,1369,740,802,531,383,811,2211,661,870,999,772 1075,-1,1015,1770,2403,1662,870,1858,941,1426,1437,3026,1486,211,1463,314 716,1015,-1,928,1483,646,390,1085,185,749,530,2034,1377,821,471,772 792,1770,928

我试图以邻接矩阵的形式将以下文件输入到我的程序中

16
-1,1075,716,792,1425,1369,740,802,531,383,811,2211,661,870,999,772
1075,-1,1015,1770,2403,1662,870,1858,941,1426,1437,3026,1486,211,1463,314
716,1015,-1,928,1483,646,390,1085,185,749,530,2034,1377,821,471,772
792,1770,928,-1,633,1089,1111,246,908,409,495,1447,1317,1565,672,1470
1425,2403,1483,633,-1,9999,1630,752,1432,9999,931,814,1938,2198,1016,2103
1369,1662,646,1089,9999,-1,820,1335,832,9999,605,1839,2030,1468,421,1419
740,870,390,1111,1630,820,-1,1224,360,965,690,2197,1480,750,630,705
802,1858,1085,246,752,1335,1224,-1,1021,442,737,1566,1190,1653,918,1558
531,941,185,908,1432,832,360,1021,-1,685,496,2088,1192,736,616,656
383,1426,749,409,9999,9999,965,442,685,-1,738,1858,1938,1221,926,1126
811,1437,530,495,931,605,690,737,496,738,-1,1631,1472,1232,188,1152
2211,3026,2034,1447,814,1839,2197,1566,2088,1858,1631,-1,2752,2824,1563,2744
661,1486,1377,1317,1938,2030,1480,1190,1192,1938,1472,2752,-1,1281,1660,1183
870,211,821,1565,2198,1468,750,1653,736,1221,1232,2824,1281,-1,1269,109
999,1463,471,672,1016,421,630,918,616,926,188,1563,1660,1269,-1,1220

77231477214702103141970585856561126115227411831091220,-1
由于您的
数据不符合特定的分隔符模式,请尝试以下操作:

public static void main(String[] args) throws FileNotFoundException {

    File file = new File("E:\\american_tour.dat");

    Scanner scanner = new Scanner(file);

    //N in the example equals 16
    int N = scanner.nextInt();

    //skip the first line
    scanner.nextLine();

    int[][] adjMat = new int[N][N];

    for(int i = 0; i < N; i++){

        String[] lines = scanner.nextLine().split(",");

        for (int j=0; j<lines.length; j++) {
            adjMat[i][j] = Integer.parseInt(lines[j]);
        }
    }

    scanner.close();
}
publicstaticvoidmain(字符串[]args)抛出FileNotFoundException{
File File=新文件(“E:\\american_tour.dat”);
扫描仪=新扫描仪(文件);
//例中N等于16
int N=scanner.nextInt();
//跳过第一行
scanner.nextLine();
int[][]adjMat=新的int[N][N];
对于(int i=0;i对于(int j=0;j改进Mouad的答案,使用扫描仪内置的自定义分隔符支持:

Scanner scanner = new Scanner(file);
scanner.useDelimiter("[\\s,]+");

int N = scanner.nextInt();
int[][] adjMat = new int[N][N];

for(int i=0; i < N; i++) {
    for (int j=0; j < N; j++) {
         adjMat[i][j] = scanner.nextInt();
    }
}

scanner.close();
Scanner Scanner=新的扫描仪(文件);
scanner.useDelimiter(“[\\s,]+”);
int N=scanner.nextInt();
int[][]adjMat=新的int[N][N];
对于(int i=0;i
什么是
N
?看起来你应该从你的文件中读取它。你需要给我们更多的东西来处理,而不是“我认为有问题”。您是否在某个地方遇到错误或异常,或者输出结果与预期不符?无论是哪一个,请提供详细信息。抱歉,我已编辑代码,使其包含int N和print方法。当我尝试打印矩阵时,它是所有16个的矩阵。是的。所有16个,因为您在initi中只调用了一次
nextInt
外循环的序列化。尝试得很好,但行不通。数据大部分用逗号分隔,而不是空格。在读取整数后,您需要使用行间逗号,或用于包含逗号。@AJNeufeld我认为它对分隔符也行不通,因为行不以
结尾,因此我使用了
扫描仪。nextLine()
scanner.useDelimiter(“[\\s,]+”)
会更简单。我已经使用
useDelimiter()
方法发布了一个答案,以供比较。(和完整性)