2011-12-23 12 views
2

arraylistをarraylistに配置しようとしています。新しい配列にデータを追加し、それを順に印刷します。私は間違いをしています。ArraylistのArraylist、未チェックのエラー。 Java

これはforループを使用して別のarraylistで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)); 

 import java.util.; 
    import 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

未チェックの警告があります。試してみてください

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

はい、ちょっと面倒です。 :-(

また、ほとんどが、それは良い練習あなたが将来的に実装するとして、あなたの心を変更するだけの場合には、左側のインターフェース(例えばリスト、いないのArrayList)を使用すると思います。例えば

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

ADDED

また、あなたはあなたのcompareTo()メソッドを簡素化することができTIDSを比較するために、(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); 
    } 
+0

ああ、それは働いた!私はそれを把握することができなかったちょっと愚かな感じ: – user1112634

+0

@ user1112634 - あなたがジェネリック型の問題から得るコンパイルエラーは、理解するのは難しいです...あなたはまだどのように良い精神モデルを持っていないジェネリック型はJavaで動作します。 –

1

たびクレアArrayLIstでデータ型を宣言する必要があります。あなたが書く必要があるのArrayList内のArrayListを作成するときに:

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

をまた、コンパイラは、あなたが書いた場合より少ない労力を入れています

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

大文字からクラス名の先頭を持つJavaの命名規則です。だから、クラス名を書くには、常に良い練習です:

public class Jogging { 
    /.. 
} 
+1

'import java.util。*;';で何も_wrong_はありません。コンパイラはほんの少しの余分な作業をするだけです。 'import java.lang。*;'は絶対に必要ありません。 –

+0

-1は輸入に関する偽のアドバイスです。 –