1

私は ArrayList の Arraylist の ArrayList を作成しており、以下のように入力しています。正しく入力されます。私はデバッグとprintln. しかし、これらの整数を取得しようとすると、正しく機能せず、ArrayList 変数のすべての値を読み取ったファイルから最後の整数が表示されます。

以下は、私が入力したコードで、うまく機能します。

    Scanner sc = new Scanner(new File("e1.txt"));
    Scanner lineSc;
    String lineStr;


    String lineRegEx = "(\\d+),(\\d+)";
    Pattern linePattern = Pattern.compile(lineRegEx);
    Matcher matcher;

    Integer vertex = 0, edge = 0, length = 0;
    String strE, strL ;
    ArrayList<Integer> tmpLE = new ArrayList<Integer>() ;
    ArrayList<ArrayList<Integer>> singleV = new ArrayList<ArrayList<Integer>>() ;

    sc.useDelimiter("\\n");


    int i = 0, j = 0;
    while (sc.hasNextLine()) {
        lineStr = sc.nextLine();
        lineSc = new Scanner(lineStr);

        lineSc.nextInt(); 

        matcher = linePattern.matcher(lineStr);

        while (matcher.find()) {
                strE = matcher.group(1);
                edge = Integer.parseInt(strE);
                tmpLE.add(EI, edge);
                strL = matcher.group(2);
                length = Integer.parseInt(strL);
                tmpLE.add(LI, length);

                singleV.add(j ,tmpLE);
                graph.add(i, singleV);
                //System.out.println (graph.get(i).get(j).get(0));
                //System.out.println (graph.get(i).get(j).get(1));
                ++j;
        }
        j = 0;
        ++i;
        lineSc.close();
    }
    sc.close();

}

これは、うまく機能しない取得に使用したコードです

    for (int i = 0; i < N; ++i) {
        Integer minLen = graph.get(i).get(0).get(LI);
        System.out.println (minLen);
        Integer choosenEdge = 0;
        for (int j = 0; j < graph.get(i).size(); ++j) {
            ArrayList<Integer> tmpArr = graph.get(i).get(j);
            System.out.print(tmpArr.get(LI) + "  " + minLen); //Wrong Output
            if (minLen > tmpArr.get(LI))
            {
                minLen = tmpArr.get(LI);
                choosenEdge = graph.get(i).get(j).get(EI);
                System.out.println (choosenEdge); // Wrong Output
            }

        }

    }
4

1 に答える 1

1

ループArrayList<Integer>ごとに作成する必要があります。matcher.find()

 tmpLE = new ArrayList<Integer>() ;
 strE = matcher.group(1);
 edge = Integer.parseInt(strE);
 tmpLE.add(EI, edge);
 strL = matcher.group(2);
 length = Integer.parseInt(strL);
 tmpLE.add(LI, length);

 singleV.add(j ,tmpLE);
 graph.add(i, singleV);
于 2012-07-23T08:13:26.007 に答える