【问题标题】:Value isn't being saved in the strings值未保存在字符串中
【发布时间】:2010-04-09 22:59:10
【问题描述】:

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

【问题讨论】:

  • 您是否尝试过单步执行您的代码,看看哪里出了问题?
  • put 方法不起作用,因为数组中没有保存任何内容,并且 count 没有增加
  • 您用来调用方法的代码是什么?
  • 尝试删除 a 变量并将 if 条件更改为 put 方法中的 if (!found)。
  • 这是我的司机:pastie.org/912326

标签: java arrays string


【解决方案1】:

if (a == k.length);

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

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

【讨论】:

  • put方法中的for循环检查key是否已经在数组中,如果存在则改变值
  • 你不懂。可以删除if (a == k.length); 行,您的代码将执行完全相同的操作。这是一个错误,因为如果您在现有键上放置和匹配,您还会将其添加到数组的末尾并增加计数。那么您将拥有两个具有相同值的键。
  • 如果键已经在数组中,则可以在同一行删除“找到”变量并跳出循环
【解决方案2】:

你的代码对我有用。

刚跑:

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

输出是“30”

用于创建/放置/获取的代码是什么样的?

【讨论】:

  • 我让用户输入 put dan 30 或在命令行中输入 dan pastie.org/912326
  • 我想通了,我在一个不起作用的 while 循环中创建了对象。
【解决方案3】:
while(true)
{
    Scanner kb = new Scanner(System.in);
    Memory m = new Memory();
...

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-07-25
    • 2014-03-01
    • 1970-01-01
    • 2023-02-07
    • 1970-01-01
    • 2015-09-27
    • 2016-04-03
    相关资源
    最近更新 更多