Arraylist в Arraylist, непроверенная ошибка.Джава - PullRequest
2 голосов
/ 23 декабря 2011

Я пытаюсь поместить arraylists в arraylist.Добавляем данные в новые массивы, затем распечатываем их по порядку.Я только получаю ошибки.

Является ли это правильным способом создания массива в другом массиве с использованием цикла for?

Мне также хотелось бы узнать, как получить данные из массива лучше, чем эти длинные.. как выражения

Мои ошибки

    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.<em>;
    import java.lang.</em>;</p>

<code>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));
                }
            }


                }
                 }
</code>

Ответы [ 2 ]

5 голосов
/ 23 декабря 2011

Непроверенные предупреждения вызваны тем, что вы не объявили универсальные типы 2-го ArrayList.Попробуйте использовать

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

Да, это немного утомительно.: - (

Кроме того, большинство считает целесообразным использовать интерфейс (например, List, а не ArrayList) на левой стороне, на случай, если вы передумаете относительно реализации в будущем. Например,

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

ДОБАВЛЕНО

Кроме того, вы можете упростить свой метод compareTo (). Для сравнения приливов взгляните на 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);
   }
1 голос
/ 23 декабря 2011

Каждый раз, когда вы создаете ArrayLIst, вам необходимо объявить его тип данных. Поэтому, когда вы создаете ArrayLIst внутри ArrayList, вам нужно написать:

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

Также компилятор должен приложить меньше усилий, если вы напишите:

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

Имена классов, начинающиеся с upperCase, являются соглашениями по именованию Java. Поэтому всегда полезно писать имя класса следующим образом:

public class Jogging {
    /..
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...