值未保存在字符串中

时间:2010-04-09 22:59:10

标签: java arrays string

我正在尝试创建一个类,我将一个键和值放入put方法,该方法将键放入k字符串数组并将值放入v字符串数组中,但是当我将其保存在数组中时得到或显示。
例如:put(dan,30)get(dan)返回null
display返回null null 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 个答案:

答案 0 :(得分:1)

if (a == k.length);

删除分号,否则它总是运行下面的块

我希望这只是一项研究,因为你应该只使用Map而不是自己实现。你的算法也很差。对于put和get都是O(n)性能。你可以做得更好,比如O(log n)

答案 1 :(得分:0)

您的代码对我有用。

刚开始:

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

输出为“30”

您的代码在创建/放置/获取时的外观是什么?

答案 2 :(得分:0)

while(true)
{
    Scanner kb = new Scanner(System.in);
    Memory m = new Memory();
...

每次循环时,您都在创建一个新的Memory对象,而不是更新对现有对象的引用。