2013-12-18 4 views
2

У меня есть эта проблема с ошибкой, которую я не могу понять. У меня есть это упражнение:ArrayList с несколькими типичными типами?

Заполните следующий общий класс Pair, так что выполнение программы дает указанный результат. Не меняйте основной.

class Pair ... { ... } 

class GenericPairTest {   
public static void main(String[] args) {  
    Pair<String,Integer> phoneNumber = new Pair<>("Bill's number", 1324); 
     System.out.println(phoneNumber); 

      Pair<Double,Double> point = new Pair<>(3.14, 2.32);  
     System.out.println(point); 
    } 
} 

Выход suposed быть таким:

номер Билла 1324

3,14 2.32`

Я попытался сделать это:

import java.util.*; 

class Pair <T,U> { 

    ArrayList<T,U> newList = new ArrayList<>(); 

    Pair(T inT, U inU){ 
    newList.add(inT,inU); 
    } 

} 

class GenericPairTest { 

    public static void main(String[] args) {   
     Pair<String,Integer> phoneNumber = 
      new Pair<>("Bill's number", 1324); 
     System.out.println(phoneNumber); 
     Pair<Double,Double> point = 
      new Pair<>(3.14, 2.32); 
     System.out.println(point); 
    } 
} 

Но это не работает :(

+2

Когда вы говорите «не работает :(» - «Что вы имеете в виду? Ошибка компиляции? Логическая ошибка? Это поможет людям помочь вам лучше. – Maroun

ответ

10

Зачем вам нужен список? Вам просто нужно хранить два объекта:

class Pair <T,U> { 
    private T _t; 
    private U _u; 

    public Pair(T t, U u) { 
     _t = t; 
     _u = u; 

    public String toString() { 
     return _t + " " + _u; 
    } 
} 
+0

Тогда почему он создает главный арраист в главном? :( Не является синтаксисом «class name = new class <>();» используется для создания списков? –

+4

Кто создает arraylist? Где? – BobTheBuilder

+0

Я путаю этот бит 'Pair phoneNumber = new Пара <> («Номер счета», 1324); ' –

4

Вы ищете это, я думаю:

ArrayList<Pair<T,U>> 

, но я думаю, вы должны создать внутренний Pair класс, который может выглядеть примерно так:

public class Pair<T, U> { 
    private T left; 
    private U right; 
    // getters/setters + constructor for them 
} 

Вы можете использовать Map, а также как другие указали, но вам не нужен ArrayList.

1

Если ваш случай, достаточно было бы запомнить пары в классе Pair и не иметь внутреннего ArrayList для этого.

После этого, извне, вы можете включить Pair s в списке.

final List<Pair<T,U>> pairList = new ArrayList<>(); 

Кроме того, извините, но вам не хватает некоторых основных навыков ООП.

5

Вам не нужен ArrayList в вашем классе Pair.

Просто сохраните два значения в качестве двух общих элементов.

+0

вы должны добавить фрагмент кода –

3

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

class Pair<T,U> { 
    final T t; 
    final U u; 

    Pair(T t, U u) { 
     this.t = t; 
     this.u = u; 
    } 

    @Override 
    public String toString() { 
     return t + " " + u; 
    } 
} 

То, как вы используете ArrayList, очень напоминает карту. Например, вы могли бы написать:

Map<T,U> map = new HashMap<>(); 
Pair(T t, U u) { 
    map.put(t, u); 
} 

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

Смежные вопросы