2

アレイリストをアレイリストに入れようとしています。新しい配列にデータを追加し、それらを順番に出力します。エラーが発生するだけです。

これは、for ループを使用して別の arraylist に arraylist を作成する正しい方法ですか?

また、これらの長い式よりも優れた方法で配列からデータを取得する方法も知りたいです。

私のエラー

    jogging.java:101: warning: [unchecked] unchecked call to add(E) as a member of the raw type java.util.ArrayList
                res.get(iter).add(new Resultat(name,time));

   jogging.java:152: warning: [unchecked] unchecked conversion found   : java.util.ArrayList required: java.util.List<T> Collections.sort(res.get(iter2));

    jogging.java:152: warning: [unchecked] unchecked method invocation: <T>sort(java.util.List<T>) in java.util.Collections is applied to (java.util.ArrayList)
                Collections.sort(res.get(iter2));

    java.util をインポートします。;
    java.lang をインポートします。;

class Resultat implements Comparable<Resultat> { String namn; double tid; public Resultat( String n, double t ) { namn = n; tid = t; } public String toString() { return namn + " "+ tid; } public int compareTo( Resultat r ) { if (this.tid < r.tid){ return -1; } else if (this.tid > r.tid){ return 1; } else if (this.tid == r.tid && this.namn.compareTo(r.namn) <= 0) { return -1; } else if ( this.tid == r.tid && this.namn.compareTo(r.namn) >= 0){ return 1; } else {return 0;} } } public class jogging { public static void main( String[] args ){ int runners = scan.nextInt(); int competitions = scan.nextInt(); //create arraylist with arraylists within ArrayList <ArrayList> res = new ArrayList<ArrayList>(); for(int i = 0; i <= competitions; ++i){ res.add(new ArrayList<Resultat>()); } for (int i = 0; i < runners; i++){ String name = scan.next(); //runs the person made int antalruns = scan.nextInt(); for(int n = 0; n <antalruns; n++){ //number of the run int compnumber = scan.nextInt(); //time for the run double time = scan.nextDouble(); for(int iter = 0; iter < res.size(); ++iter){ res.get(iter).add(new Resultat(name,time)); } } } for(int iter2 = 0; iter2 < res.size(); ++iter2) { Collections.sort(res.get(iter2)); System.out.println(iter2); for(int it = 0; it < res.get(iter2).size(); ++it) { System.out.println(res.get(iter2).get(it)); } } } }
4

2 に答える 2

5

未確認の警告は、2 番目の ArrayList のジェネリック型を宣言していないためです。使ってみて

ArrayList <ArrayList<Resultat>> res = new ArrayList<ArrayList<Resultat>>();

はい、少し面倒です。:-(

また、将来の実装に関して気が変わった場合に備えて、ほとんどの人は左側でインターフェース (たとえば、ArrayList ではなく List) を使用することをお勧めします。例えば

List <List<Resultat>> res = new ArrayList<ArrayList<Resultat>>();

追加した

また、compareTo() メソッドを単純化することもできます。tid を比較するには、Double.compare() を参照してください。何かのようなもの:

   public int compareTo( Resultat r ) {

      int compare = Double.compare(tid, r.tod);
      if (compare != 0)
         return compare;
      else
         return namn.compareTo(r.namn);
   }
于 2011-12-23T00:09:29.237 に答える
1

ArrayLIstを作成するたびに、そのデータ型を宣言する必要があります。したがって、ArrayList内にArrayLIstを作成するときは、次のように記述する必要があります。

ArrayList<ArrayList<Resultat>> res = new ArrayList<ArrayList<Resultat>>();

また、次のように記述した場合、コンパイラはより少ない労力を費やす必要があります。

import java.util.ArrayList;  // NOT: import java.util.*;

クラス名をupperCaseから開始するのは、Javaの命名規則です。したがって、クラス名を次のように記述することは常に良い習慣です。

public class Jogging {
    /..
}
于 2011-12-23T00:27:07.323 に答える