Значение не сохраняется в строках - PullRequest
0 голосов
/ 10 апреля 2010

Я пытаюсь создать класс, в котором я помещаю ключ и значение в метод put, который помещает ключ в массив строки k и значение в массив строки v, однако он не сохраняется в массиве, когда я получить или отобразить.
Например: put (dan, 30) get (dan) возвращает ноль
Дисплей возвращает ноль ноль 10 раз. Кто-нибудь знает в чем дело?

public class Memory 
       {
       final int INITIAL_CAPACITY = 10;
       String[] k = new String[INITIAL_CAPACITY];
       String[] v = new String[INITIAL_CAPACITY];
       int count = 0;

       public Memory()
       {
          count = 0;
       }
       public int size()
       {
          return count;
       }
       public void put(String key, String value)
       {
            int a = 0;
            boolean found = false;
            for (int i = 0; i < k.length; i++)
            {
                //System.out.println("key is " + key.equals(k[i]));
                if (key.equalsIgnoreCase(k[i]))
                {
                    v[i] = value;
                    found = true;
                }
                if (found)
                    break;
                a++;
            }
            //System.out.println(a == k.length);
            if (a == k.length);
            {
              k[count] = key;
              v[count] = value;
            //System.out.println(k[count] + " " + v[count]);
              count++;          
            //System.out.println(count);
            }

       }
       public String get(String key)
       {
          String output = "a";
          for(int i = 0; i < k.length; i++)
          {
             if(!key.equalsIgnoreCase(k[i]))
             {
                output = null;
             }
             else
             {   
                output = v[i]; 
                return output;
             }  
          }
          return output;
       }
       public void clear()
       {
            for (int i = 0; i < k.length; i++)
            {
                k[i] = null;
                v[i] = null;
            }
          count = 0;
       }

        public void display()
        {
            for (int i = 0; i < k.length; i++)
            {
                System.out.println(k[i] + " " + v[i]);
            }
        }
    }

Ответы [ 3 ]

1 голос
/ 10 апреля 2010

if (a == k.length);

удалите точку с запятой, иначе она всегда запускает блок ниже

И я надеюсь, что это просто для изучения, потому что вы должны просто использовать Карту, а не реализовывать ее самостоятельно. Также ваш алгоритм очень плохой. Это O (n) производительность как для put, так и для get. Вы действительно можете сделать лучше, как O (log n)

0 голосов
/ 10 апреля 2010
while(true)
{
    Scanner kb = new Scanner(System.in);
    Memory m = new Memory();
...

Каждый раз, когда вы выполняете цикл, вы создаете новый объект Memory вместо обновления ссылки на существующий.

0 голосов
/ 10 апреля 2010

Ваш код работал для меня.

Просто запустил:

public static void main(String args[]){
        Memory newMem = new Memory();
        newMem.put("Dan", "30");
        System.out.println(newMem.get("Dan"));
    }

И вывод был "30"

Как выглядит ваш код для создания / размещения/ получение?

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