현재 AI 용 전위 테이블을 만들어야하는 게임을하고 있습니다. 나는 Hashtable
을 구현하여 Hashtable에 대한 key
이 고려중인 상태이고 그에 해당하는 value
이 최적의 다음 이동이되도록했습니다.안드로이드에서 데이터를 내부적으로 저장하면 데이터가 엉망입니다.
그러나 안드로이드의 내부 저장소에 Hashtable을 저장하고 다음 번에 복원 할 때 저장된 데이터가있는 것 같지만 게임 상태 인 keys
은 이전 인스턴스에서 저장 한 keys
과 다릅니다. 그것은 반복 같은 상태에 대해 같은 값을 반환 유지하기 때문에 나는 내 hashCode()
구현에 아무런 문제가 볼
private void readTranspositionTableFromFile() {
FileInputStream fis = openFileInput(FILENAME);
ObjectInputStream ois = new ObjectInputStream(fis);
transpositionTable = (Hashtable<BoardState, NextMove>) ois.readObject();
ois.close();
deleteFile(FILENAME);
}
private void writeTranspositionTableToFile() {
FileOutputStream fos = openFileOutput(FILENAME, Context.MODE_PRIVATE);
ObjectOutputStream oos = new ObjectOutputStream(fos);
oos.writeObject(transpositionTable);
oos.close();
}
: 여기
내가 저장하고 내 데이터를 복원하는 방법입니다.
2 개의 런타임을 기록하고 첫 번째에 hashCode()
이 3964 및 3029를 반환하여 테이블에 추가 된 2 개 상태에 대해 전환 표가 내 데이터를 엉망으로 만드는 것으로 의심됩니다. 그러나 파일에서 테이블을 읽는 동안 hashCode()
은 9119를 두 번 반환했습니다.
데이터 저장/복원에 문제가 있습니까?
아마도 BoardState가 올바르게 직렬화되지 않았습니까? 귀하가 파일을 작성하고 읽은 후에 회원들의 정확성을 확인 했습니까? – ekholm
Hashtable을 직접 구현하셨습니까? 왜 HashMap을 사용하지 않습니까? 필자는 직렬화 문제가 없었습니다. 직렬화 프로세스의 일부 코드를 추가하십시오. – Martze
@ekholm 방금 BoardState에'Serializable '을 추가했습니다. 그 외에도 내 보드 상태는 단지 몇 개의 인스턴스 변수, getter, setters, hashCode() 및 equals()로 구성됩니다. @Martze 아니요, Java 라이브러리 ([http] Hashtable (http://docs.oracle.com/javase/1.4.2/docs/api/java/util/Hashtable.html))에서 [Hashtable]). 나는 HashMap을 시도하지 않았다. – sk1ll3r