2

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
4

2 に答える 2

0

リスト全体がrun()メソッドで読み取られたら、配置できます。

  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();

    int key = 0;
    do {
      System.out.print("Enter a key: ");
      try {
        Scanner userInput = new Scanner(System.in);
        key = userInput.nextInt();
      } catch (InputMismatchException e) {
        System.out.println("> Invalid key");
        continue;
      }

      Person found = search(key);
      if (found == null)
        System.out.println("> Person not found");
      else
        System.out.println("> Person found => " + found);
    } while(key >= 0);
  } // run()

このメソッドは、リスト内searchの各 ID を指定されたキーと比較する単純なループです。Person

run投げない方法については、パンフレットの回答IOExceptionに従ってください。

于 2012-05-02T17:22:40.553 に答える
0

try/catchって知ってる?

private void run() {
    try {
        // Loop, etc.
    } catch (IOException e) {
        // Handle exception
    }
}
于 2012-05-02T16:23:04.643 に答える