1

私はかなり新しく、Java使用してBlueJいます。プログラムを機能させるには、次のことを行う必要があります。

    //  Insert code here to perform a sequence of
    //  interactive transactions with the user.
    //  The user enters an item number and the program
    //  either displays the item or prints an error message
    //  if the item is not found.  The program terminates
    //  when the user enters zero as the item number.

残念ながら、プログラムを動作させることができないようです。うまくいけば、誰かが私を助けてくれます。

これはclass Program2ループを必要とするものです:

import java.util.*;

public class Program2 {
    public static void main(String[] args) {
        Scanner kbd = new Scanner(System.in);
        Catalog store = new Catalog(3);
        int itemnum = 0;
        Item item;

        try {
            store.insert
              (new Music(1111, "Gold", 12.00, "Abba"));
            store.insert
              (new Movie(2222, "Mamma Mia", 16.00, "Meryl Streep"));
            store.insert
              (new Book(3333, "DaVinci Code", 8.00, "Dan Brown"));
              store.insert
            (new Music(4444, "Legend", 15.00, "Bob Marley"));
            } catch (CatalogFull exc) {
                System.out.println(exc);
            }


        //  Insert code here to perform a sequence of
        //  interactive transactions with the user.
        //  The user enters an item number and the program
        //  either displays the item or prints an error message
        //  if the item is not found.  The program terminates
        //  when the user enters zero as the item number.

        itemnum = kbd.nextInt();
        while (itemnum == 0) {
            item = store.find(itemnum);
            if (item != null) {
                System.out.print(itemnum);
            } else {
                System.out.printf("%s was not found.%n", item);
            }
            System.out.println();
            System.out.print("Player (0 to exit)? ");
            itemnum = kbd.nextInt();
        }
    }
}

現時点では、現在のエラーは "(itemnum)" のループにあり、次のように言っています。

unreported exception ItemNotFound; must be caught or declared to be thrown

そうは言っても、それが唯一の問題ではなく、プログラムのこの部分を正しく実行していないと思います。うまくいけば、誰かが私を助けてくれます。前もって感謝します。

役に立つかもしれないし、役に立たないかもしれない他のいくつかのクラスを次に示します。

これはclass ItemNotFound次のとおりです。

// This exception is thrown when searching for an item
// that is not in the catalog.
public class ItemNotFound extends Exception {
    public ItemNotFound(int id) {
        super(String.format("Item %d was not found.", id));
    }
}

これはclass CatalogFull

// This exception is thrown when trying to insert an item
// when the catalog is full.
public class CatalogFull extends Exception {
    public CatalogFull() {
        super("The catalog is full.");
    }
}

これはclass Catalog次のとおりです。

public class Catalog {
    private Item[] list;
    private int size;

    // Construct an empty catalog with the specified capacity.
    public Catalog(int max) {
        list = new Item[max];
        size = 0;
    }

    // Insert a new item into the catalog.
    // Throw a CatalogFull exception if the catalog is full.
    public void insert(Item obj) throws CatalogFull {
        if (list.length == size) {
            throw new CatalogFull();
        }
        list[size] = obj;
        ++size;
    }

    // Search the catalog for the item whose item number
    // is the parameter id.  Return the matching object 
    // if the search succeeds.  Throw an ItemNotFound
    // exception if the search fails.
    public Item find(int id) throws ItemNotFound {
        for (int pos = 0; pos < size; ++pos){
            if (id == list[pos].getItemNumber()){
                return list[pos];
            }
        }
        throw new ItemNotFound(id);
        }
}

これはclass Item次のとおりです。

public class Item {
    private int itemnum;
    private String title;
    private double price;

    // Construct a new item object.
    public Item(int id, String t, double p) {
        itemnum = id;
        title = t;
        price = p;
    }

    // Return the item number of this item.
    public int getItemNumber() {
        return itemnum;
    }

    // Return the item type. This is overridden in subclasses.
    public String getItemType() {
        return "Item";
    }

    // Return a printable String represenation of this item.
    public String toString() {
        String line1, line2, line3, line4, out;
        String itemtype = this.getItemType();
        line1 = String.format("Item number: %d%n", itemnum);
        line2 = String.format("Item type:   %s%n", itemtype);
        line3 = String.format("Item title:  %s%n", title);
        line4 = String.format("Item price:  %.2f%n", price);
        out = line1 + line2 + line3 + line4;
        return out;
    }
}
4

2 に答える 2

1

アイテムが見つからないときに例外をfind()スローするようにメソッドを定義したためです。ItemNotFound

   public Item find(int id) throws ItemNotFound {

find() コンパイラは、メソッドが をスローする可能性があることを伝えていExceptionます。必要な手順を実行してください。

item = store.find(itemnum); したがって、この行をに入れて try catch block処理する必要があります。

そう、

try{

     item = store.find(itemnum);

} catch (ItemNotFound e){

//handle it

}
于 2013-10-03T06:19:00.603 に答える