NFLのチーム名と得点を含む17のファイルを受け取るこのプログラムを書く必要があります(1つのファイルには32チームすべてのスコアが含まれていますが、別のファイルには同じチームのうち30チームに対して30のスコアが含まれます)もちろん)。私の教授は、HashTableの実装を提供してくれました。ハッシュテーブル内の各インデックスにLinkedListを作成して衝突を処理しています(私はかなり経験がないので、正しい言葉ですが、うまくいけば私が何を意味するか知っています)。私は正常にすべてのファイルとデータをインポートし、私の教授が私たちに与えた衝突処理でハッシュテーブルにそれらを入力しました。しかし、私がキーのいずれかのgetメソッドを呼び出そうとするたびに、 "null"を返します。どうしてこれなの?各チームの平均チームスコアを見つける必要があるため、getメソッドがnullを返すため、これを行うことができません。どんな助けでも大歓迎です!Java HashTable実装のgetメソッドはnullを返しますか?
コード:
HashEntry:
public class HashEntry
{
private String key;
private Double value;
private HashEntry next;
public HashEntry(String key, Double value)
{
this.key = key;
this.value = value;
}
public String getKey()
{
return key;
}
public void setKey(String key)
{
this.key = key;
}
public Double getValue()
{
return value;
}
public void setValue(Double value)
{
this.value = value;
}
public HashEntry getNext()
{
return next;
}
public void setNext(HashEntry next)
{
this.next = next;
}
public boolean isNextEmpty()
{
if(next.equals(null))
return true;
return false;
}
ハッシュテーブル:
public class HashTable implements StringHashTable
{
private HashEntry[] dataArray;
private int size;
public HashTable()
{
dataArray = new HashEntry[1000];
size = 0;
}
private int hash(String key)
{
int sum = 0;
for(int i = 0; i < key.length(); i++)
sum += (int)key.charAt(i);
return sum % dataArray.length;
}
@Override
public void put(String key, Double value)
{
HashEntry entry = new HashEntry(key, value);
int indexToPut = hash(key);
HashEntry cursor = dataArray[indexToPut];
if(cursor != null)
{
while(cursor.getNext() != null && cursor.getKey() != key)
{
cursor = cursor.getNext();
}
if(cursor.getKey() != key)
{
cursor.setNext(entry);
}
else
{
cursor.setValue(value);
}
}
else
{
dataArray[indexToPut] = entry;
}
size++;
}
@Override
public Double get(String key)
{
int indexToGet = hash(key);
HashEntry cursor = dataArray[indexToGet];
while(cursor != null && cursor.getKey() != key)
{
cursor = cursor.getNext();
}
if (cursor == null)
{
return null;
}
return cursor.getValue();
}
@Override
public int size()
{
return size;
}
@Override
public void remove(String key)
{
int indexToRemove = hash(key);
HashEntry cursor = dataArray[indexToRemove];
HashEntry prev = null;
while(cursor != null && cursor.getKey() != key)
{
prev = cursor;
cursor = cursor.getNext();
}
if (cursor != null)
{
if (prev == null)
{
dataArray[indexToRemove] = cursor.getNext();
}
else
{
prev.setNext(cursor.getNext());
}
size--;
}
}
public String toString()
{
String res = "";
for(HashEntry entry : dataArray)
{
if (entry != null)
{
HashEntry cursor = entry;
while(cursor != null)
{
res += cursor.getKey() + " = " + cursor.getValue() + "\n";
cursor = cursor.getNext();
}
}
}
return res;
}
ドライバクラス:
public class Project3
{
static HashTable table = new HashTable();
static HashMap<String, Double> table1 = new HashMap<String, Double>();
public static void main(String[] args) throws IOException
{
//HashTableImpl<String, Double> table = new HashTableImpl<String, Double>();
if (args.length < 1)
{
System.out.println("Error: Directory name is missing");
System.out.println("Usage: java scoreProcess directory_name");
return;
}
File directory = new File(args[0]); // args[0] contains the directory name
File[] files = directory.listFiles(); // get the list of files from that directory
File file;
Scanner input;
// process the arguments stores in args
for (int i = 0; i < files.length; i++)
{
input = new Scanner(files[i]);
//System.out.println("\nCurrent file name: " + files[i].getName());
// no error checking done here, add your own
String name;
Double score;
while(input.hasNext())
{
name = "";
while(!input.hasNextDouble())
{
name += input.next() + " ";
}
score = input.nextDouble();
//System.out.println("Name: " + name + " Score: " + score);
table.put(name, score);
table1.put(name, score);
}
}
System.out.println("\n");
System.out.println(table.toString());
System.out.println(table.size());
//System.out.println(table1.toString());
System.out.println(table.get("Minnesota"));
}
}
ドライバ出力: https://drive.google.com/file/d/0BwujWiqVRKKsNW52N1M2UllCeHc/view?usp=sharing
テキスト・ファイル例:あなたは、あなたのコード内のエラーの数を持っている
New England 27
Indianapolis 24
Tennessee 17
Miami 7
St. Louis 17
Arizona 10
Seattle 21
New Orleans 7
NY Jets 31
Cincinnati 24
Pittsburgh 24
Oakland 21
Washington 16
Tampa Bay 10
San Diego 27
Houston 20
Jacksonville 13
Buffalo 10
Detroit 20
Chicago 16
Cleveland 20
Baltimore 3
Atlanta 21
San Francisco 19
Philadelphia 31
NY Giants 17
Minnesota 35
Dallas 17
Denver 34
Kansas City 24
Green Bay 24
Carolina 14
文字列を==と比較している場合は、等価と比較する必要があります。 – garnulf
ドライバクラスmain()を実行した後、コンソールに表示される正確な出力を提供できますか? – developer
@developer今投稿を編集します。 – thelonewanderer