Computer Science 210
Data Structures
Fall 2019, Siena College
SpellsArrayAssociation BlueJ Project
Click here to download a BlueJ project for SpellsArrayAssociation.
SpellsArrayAssociation Source Code
The Java source code for SpellsArrayAssociation is below. Click on a file name to download it.
/**
* Example SpellsArray: a version of the Spells program that
* uses an array of Associations
*
* Siena College, CSIS 210, Fall 2017
* @version Fall 2019
*/
import java.io.File;
import java.io.IOException;
import java.util.Scanner;
public class SpellsArrayAssociation {
/**
Create an array of Association objects representing Harry
Potter spells, and look up spell actions by name.
@param args not used
@throws IOException
*/
public static void main(String args[]) throws IOException {
final int NUM_SPELLS = 10;
// create an array of the magic spells we know.
// Note: due to the way Java handles arrays and generic types,
// we have to leave off the <String,String> in the construction..
Association<String,String> spells[] = new Association[NUM_SPELLS];
Scanner inFile = new Scanner(new File("spells.txt"));
for (int i = 0; i < NUM_SPELLS; i++) {
String spell = inFile.nextLine().trim();
String action = inFile.nextLine().trim();
spells[i] = new Association<String,String>(spell, action);
//System.out.println(spells[i]);
}
inFile.close();
// we play a little game matching spells to descriptions
// until an invalid spell is specified
Scanner keyboard = new Scanner(System.in);
int spellnum = 0;
while (spellnum >= 0) {
System.out.print("Which spell will you use? ");
String spellName = keyboard.next();
spellnum = -1;
for (int spellIndex = 0; spellIndex < spells.length; spellIndex++) {
if (spellName.equals(spells[spellIndex].getKey())) {
spellnum = spellIndex;
break;
}
}
if (spellnum >= 0) {
System.out.println(spells[spellnum].getValue());
}
else {
System.out.println("Your wand doesn't know that one. It explodes. Bye!");
}
}
}
}
/**
* Associate key/value pairs. keys are immutable.
*
* @author Jim Teresco and the CSIS 210 class, Fall 2017
* Siena College on its birthday.
*
* @version Fall 2019
*
*/
public class Association<K,V>
{
/* instance variables to store our key and our value */
private K key;
private V value;
/**
construct a new Association with the given key/value pair.
@param k the immutable key
@param v the initial value
*/
public Association(K k, V v) {
key = k;
value = v;
}
/**
construct a new Association with the given key, but no value.
value defaults to null.
@param k the immutable key
*/
public Association(K k) {
key = k;
value = null;
}
/**
Set a new value for this Association
@param v the new value to set
*/
public void setValue(V v) {
value = v;
}
/* accessors */
/**
retrieve this Association's key
@return the key of this Association
*/
public K getKey() {
return key;
}
/**
retrieve this Association's value
@return the value of this Association
*/
public V getValue() {
return value;
}
/**
Produce human-readable representation of this Association's
key and value.
@return a human-readable representation of this Association's
key and value
*/
public String toString() {
return "<key: " + key + ", value: " + value + ">";
}
/**
Compare this Association with another for equality, defined by the
two having equal keys, regardless of values.
@param o the other Association
@return true if this Association and o are equal, false otherwise
*/
public boolean equals(Object o) {
Association<K,V> other = (Association<K,V>) o;
return other.key.equals(key);
}
}