哈希图,键仍然存在"false"结果



以下是我的代码,即使键存在:

import java.util.HashMap;
import java.util.Map;
import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;

public class SequenceNumber {
 public static int getSequenceNumber (String TcOrderId){
    // Create a hash map to set key values pair.
    Map<String, Integer> map = new HashMap<String, Integer>();  
    int i= 1;
    // check if hashmap contains the key.
    System.out.println("key present " +map.containsKey(TcOrderId));
    if (map.containsKey(TcOrderId))
    {
       //Key Present
       System.out.println("Inside IF ");
       int value = map.get(TcOrderId);
       System.out.println("value from the key " + value);
       map.remove(value);
       map.put(TcOrderId, value+1);
       return map.get(TcOrderId);
    }
    else
    {
        //Key Not present
        System.out.println("INSIDE ELSE ");
        map.put(TcOrderId, i);
        System.out.println("map "+ map);
        return map.get(TcOrderId);
    }
}
public static void main(String[] args) throws IOException {
    String sCurrentLine;
    BufferedReader br = null;
    try {
        br = new BufferedReader(new FileReader("C:\Users\BongAn\Desktop\Package\testing.txt"));
    } catch (FileNotFoundException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    {
        while ((sCurrentLine = br.readLine()) != null) {
            //String orderid = sCurrentLine.substring(0, 6);
            System.out.println("reading line " +sCurrentLine);
            int seqvalue = getSequenceNumber(sCurrentLine);
            System.out.println("seqvalue "+seqvalue);
        }
    }
}

}

文件中的输入数据:
1233
1233
1234

结果应该是
1
2
1

,但每次它都进入其他循环,结果为
1
1
1

我正在创建自己的索引时尝试使用hashmap。

在您的代码中,每次调用get sequencenumber函数 - 您创建新的哈希图。我相信这不是您想要的。

避免这种情况 - 您可以简单地将Map<String, Integer> map = new HashMap<String, Integer>();移至课堂上。由于函数get -sequencenumber是一个静态函数 - 您需要使变量静态。希望这会有所帮助。

代码:

public class SequenceNumber {
 // PUT STATIC VARIABLE HERE:
 static Map<String, Integer> map = new HashMap<String, Integer>();  
 public static int getSequenceNumber (String TcOrderId){
    // Create a hash map to set key values pair.
    // (REMOVE) Map<String, Integer> map = new HashMap<String, Integer>();**  
    int i= 1;
    // check if hashmap contains the key.
  ...
  }
...
}

另一种替代

(也许更好)是避免静态功能和变量,并创建一个序列对象的实例。这样,您可以单独保留几个不同的实例编号。

简单片段:

public class SequenceNumber {
 // Your hashmap here:
 Map<String, Integer> map = new HashMap<String, Integer>();
 public int getSequenceNumber (String TcOrderId) {
  // ...
 }
public static void main(String[] args) throws IOException {
    // Instance of SequenceNumber object:
    SequenceNumber sequenceNumber = new SequenceNumber();
    String sCurrentLine;
    BufferedReader br = null;
    // ...
        while ((sCurrentLine = br.readLine()) != null) {
            //String orderid = sCurrentLine.substring(0, 6);
            System.out.println("reading line " +sCurrentLine);
            int seqvalue = sequenceNumber.getSequenceNumber(sCurrentLine);
            System.out.println("seqvalue "+seqvalue);
        }
    // ...
    }
}

类似的东西应该起作用。

还没有尝试过。
public class SequenceNumber {
 public static int getSequenceNumber (String TcOrderId, Map<String, Integer> map){  
    if(!map.contains(TcOrderId)){
        map.put(TcOrderId, 0);
    }
    map.put(TcOrderId, map.get(TcOrderId)+1);
    return map.get(TcOrderId);
}
public static void main(String[] args) throws IOException {
    String sCurrentLine;
    BufferedReader br = null;
    Map<String, Integer> map = new HashMap<String, Integer>();
    try {
        br = new BufferedReader(new FileReader("C:\Users\BongAn\Desktop\Package\testing.txt"));
    } catch (FileNotFoundException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    {
        while ((sCurrentLine = br.readLine()) != null) {
            //String orderid = sCurrentLine.substring(0, 6);
            System.out.println("reading line " +sCurrentLine);
            int seqvalue = getSequenceNumber(sCurrentLine, map);
            System.out.println("seqvalue "+seqvalue);
        }
    }

最新更新