2015-06-06 2 views
1

После инициализации HashMap значения вставляются. Но при попытке распечатать значения все значения не печатаются. Я пытаюсь решить проблему this.Значения не повторяются в HashMap в Java

Код выглядит следующим образом:

import java.util.Scanner; 
import java.util.HashMap; 
import java.util.Iterator; 

public class test 
{ 
    public static void main(String args[]) throws Exception 
    { 
     Scanner input = new Scanner(System.in); 
     String inputString = input.next(); 
     int cases = input.nextInt(); 
     long max = 0; 
     HashMap<Long, Long> points = new HashMap<>(); 
     while(cases>0) 
     { 
      points.put(input.nextLong(), input.nextLong()); 
      cases--; 
     } 
     Iterator iterator = points.keySet().iterator(); 
     while(iterator.hasNext()) 
     { 
      long x = (Long)iterator.next(); 
      long y = points.get(x); 
      if(x>max) 
       max = x; 
      if(y>max) 
       max = y; 
     } 
     while(inputString.length()<=max) 
      inputString = inputString.concat(inputString); 

     iterator = points.keySet().iterator(); 
     while(iterator.hasNext()) 
     { 
      long x = (Long)iterator.next(); 
      long y = points.get(x); 
      System.out.println("x: "+x+" y: "+y); 
/*   if(inputString.charAt(new Long(x-1).intValue()) == inputString.charAt(new Long(y-1).intValue())) 
       System.out.println("Yes"); 
      else 
       System.out.println("No");*/ 
     } 
    } 
} 

Выход:

enter image description here

Значения 2 и 4 не печатаются. Они не повторяются HashMap. В чем проблема?

+0

Вам не нужно хранить вход, чтобы решить эту проблему. Просто изучите ввод и произведите вывод на входную строку (и выбросьте вход). – Bohemian

+0

Богемский, но мне нужно найти максимальное количество раз, когда мне нужно дублировать и конкатенировать строку вправо. Поэтому для этой цели. В противном случае это указывает на превышение времени –

ответ

5

Карта может иметь только одно значение за ключ.

Если вы поместите значение 4 в ключ 2, а затем вы поместите значение 5 в тот же ключ, вы переписываете старое значение. На карте остается только последняя (5).

1

Коренная проблема заключается в том, что вы используете неправильную структуру данных. Вы не используете тот факт, что это карта. Вы используете его только как список точек. Лучшее решение заменить его со списком точек, как показано в следующей программе:

import java.util.ArrayList; 
import java.util.List; 

public class Test { 
    public static void main(String[] args) { 
    List<int[]> points = new ArrayList<int[]>(); 
    points.add(new int[]{2,4}); 
    points.add(new int[]{2,5}); 
    points.add(new int[]{7,14}); 
    for(int[] point : points){ 
     int x = point[0]; 
     int y = point[1]; 
     System.out.println("x: "+x+" y: "+y); 
    } 
    } 
} 

Выход:

x: 2 y: 4 
x: 2 y: 5 
x: 7 y: 14