SO 私は Java コードで多くの問題を抱えています。ContactList.java を変更して、ユーザーに整数キーの入力を求めるループが発生するようにする必要があると思われます。キーが負でない場合は、そのキーを持つ Person の配列を検索します。Person が見つかった場合は、Person を表示します。Person が見つからない場合は、その旨のメッセージを表示します。ユーザーが負のキーを入力すると、プログラムは終了します。しかし、while ループを実装する場所がわかりません。また、現在 run() は IOException をスローします。IOException をキャッチするように run() を変更しようとしています。例外がキャッチされた場合は、説明的なメッセージを表示して終了します。
import java.io.IOException;
import java.net.URL;
import java.util.Scanner;
public class ContactList {
private Person[] theList;
private int n; // the number of Persons in theList
// Returns a Scanner associated with a specific text-based URL
// online.
private Scanner makeScanner() throws IOException {
final String source =
"http://userpages.umbc.edu/~jmartens/courses/is247/hw/05/05.txt";
final URL src = new URL(source);
return new Scanner(src.openStream());
} // makeScanner()
// Return a Person instance based upon data read from the given
// Scanner.
private Person getPerson(final Scanner in) throws FileFormatException {
if (!in.hasNextLine())
return null;
String line = in.nextLine().trim();
int key = Integer.parseInt(line);
String name = in.nextLine().trim();
String mail = in.nextLine().trim().toLowerCase();
if (in.hasNextLine()) {
String empty = in.nextLine().trim(); // skip blank line
if (empty.length() > 0)
throw new FileFormatException("missing blank line");
} // if
return new Person(key, name, mail);
} // getPerson()
// Display the array contents.
private void display() {
for (int i = 0; i < n; ++i)
System.out.println(theList[i]);
} // display()
// Example code to display the contents of the contact list file.
private void run() throws IOException {
theList = new Person[1024];
Scanner in = makeScanner();
int index = 0;
Person p = getPerson(in);
while (p != null) {
theList[index++] = p;
p = getPerson(in);
}
n = index;
display();
} // run()
public static void main(String[] args) throws IOException {
ContactList cl = new ContactList();
cl.run();
} // main()
} // class ContactList