2015-01-17 3 views
0

У меня есть класс IntPair, который использует два метода: «getFirst()» и «getSecond()». Хотя в этом методе я сейчас работаю, я хочу проверить, содержит ли «hashMap j» определенное значение, а затем выполняет действия. Я думаю, что у меня есть проблемы в этих линиях:Проверить значения HashMap <Object, String>

Object obj = j.values(); 
t.moveCursor(((IntPair)obj).getFirst(), ((IntPair)obj).getSecond()); 

Я не знаю, если я литье нормально к объекту, или, если первая строка «объект OBJ = j.values ​​()» следует заменить с другим вызовом метода. Я тестировал с помощью System.out.print («Сообщение») после j.containsValue («0»), и я получил сообщение назад.

Это часть метода, который я пытаюсь заставить его работать.

public static HashMap<IntPair, String> j = new HashMap<>(); 

j.put(new IntPair(firstInt, secondInt), value); 
if (j.containsValue("0")) 
{ 
Object obj = j.values(); 
t.moveCursor(((IntPair)obj).getFirst(), ((IntPair)obj).getSecond()); 
t.putCharacter('x'); 
} 
else if (j.containsValue("1")) 
{ 
Object obj = j.values(); 
t.moveCursor(((IntPair)obj).getFirst(), ((IntPair)obj).getSecond()); 
t.putCharacter('v'); 
} 

IntPair Класс:

public class IntPair { 
private final int first; 
private final int second; 

public IntPair(int first, int second) { 
    this.first = first; 
    this.second = second; 
} 

@Override 
public int hashCode() { 
    int hash = 3; 
    hash = 89 * hash + this.first; 
    hash = 89 * hash + this.second; 
    return hash; 
} 

@Override 
public boolean equals(Object obj) { 
    if (obj == null) { 
     return false; 
    } 
    if (getClass() != obj.getClass()) { 
     return false; 
    } 
    final IntPair other = (IntPair) obj; 
    if (this.first != other.first) { 
     return false; 
    } 
    if (this.second != other.second) { 
     return false; 
    } 
    return true; 
} 

public int getFirst() { 
    return first; 
} 

public int getSecond() { 
    return second; 
} 
} 

Любая помощь будет очень ценна. Спасибо!

+0

1) Я не вижу полный метод, где вы заявляете, '" это метод ... "'. 2) Я предполагаю (и, конечно, надеюсь), что ваш класс IntPair переопределяет равные и hashCode() соответственно, правильно? 3) Я не уверен, что именно вы спрашиваете или что вы застряли. Вы упомянули вопрос о кастинге - ваша попытка бросить, вызывая ошибку или исключение? –

ответ

0

Обратите внимание, что метод values() возвращает коллекцию объектов значений, вот коллекция строк. Вы не можете передать это в IntPair, и я удивлен, что ваша попытка не вызывает ошибку компилятора.

+0

Я отредактировал вопрос. Что следует использовать вместо значений()? – XhensB

+0

@XhensB: чего вы пытаетесь достичь? Какие ошибки вы видите? –

+0

Я не получаю никаких ошибок, но код для меня не работает. У меня есть экран терминала, и я хочу принимать значения из hashMap и передавать их в качестве аргументов в методе moveCursor (int x, int y). После перемещения курсора в нужное место, я хочу заполнить его символами. И в результате у меня есть пустой экран в конце. – XhensB

1

Существует большая проблема с кодом вы написали В строке

t.moveCursor(((IntPair)obj).getFirst(), ((IntPair)obj).getSecond()); 

выражение

((IntPair)obj).getFirst() 

не возвратит значение GetFirst, как OBJ здесь не типа IntPair но OBJ является сборник элементов IntPair вернулся

Object obj = j.values(); 

, так что вам нужно получить IntPair элемент из этой коллекции, а затем вы можете прочитать GetFirst() я написал небольшую программу, чтобы моя точка

public static HashMap<IntPair, String> j = new HashMap<IntPair, String>(); 

    public static void main(String[] args) { 
     j.put(new IntPair(2, 3), "0"); 
     if (j.containsValue("0")) { 
      Set<Entry<IntPair, String>> pairs = j.entrySet(); 
      Iterator<Entry<IntPair, String>> it = pairs.iterator(); 
      Entry e; 
      while (it.hasNext()) { 
       e = it.next(); 
       if (e.getValue().equals("0")) { 
        IntPair resultObj = (IntPair) e.getKey(); 
       } 
      } 

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