Вызов метода с циклом for внутри, без обновления переменных - PullRequest
0 голосов
/ 24 октября 2019

Я создаю книжный магазин для лаборатории в своем классе информатики. Он использует три класса, которые взаимодействуют друг с другом, чтобы создать книжный магазин, который добавляет книги, продает книги, отображает библиотеку и так далее. Я использую массив объектов. Моя проблема возникает, когда я добавляю несколько книг в библиотеку, а затем пытаюсь получить к ним доступ, чтобы продать их. Я думаю, что проблема заключается в методе «inStock», который я использую, чтобы определить, есть ли у нас конкретная книга для продажи. Я не уверен, как получить доступ ко всем книгам, которые я добавил, чтобы продать их, и я не уверен, что мой метод - лучший способ сделать это.

Всякий раз, когда я пытаюсь продать книгу, которая неэто не первое, что я добавил, программа утверждает, что у них нет этой книги в запасе, хотя я могу отображать все книги другим методом.

Как я могу заставить этот метод обнаруживать всеперечисленные книги, которые я добавил методом inStock?

        // Search for the book...if found, adjust the quantity.      
        // otherwise, Book not in the BookStore.
        for(int i = 0; i < totalbooks; i++) {
            if(title.equals(books[i].getTitle())) {
                if(quantity <= books[i].getQuantity()) {
                    return true;

                }
                else
                    return false;
            }
            else return false;

        }
        return false;
    }

//this is the inStock method^
public boolean sellBook(String title, int quantity) {
        // Checks to see if the books are in stock.
        for(int i = 0; i < totalbooks; i++) {
            if(title.equals(books[i].getTitle())) {
                if(quantity <= books[i].getQuantity()) {
                    gross = gross + books[i].getQuantity()*books[i].getPrice();
                    books[i].subtractQuantity(quantity);

                    return true;
                }
                else
                    return false;
            }
            else
                return false;
        }
        return false;
    }
//this is the method I use to sell the books

case 2: System.out.println("Please enter the book title.");
                title = input.next();
                System.out.println();

                //input.hasNext();
                if(!(bookstore.inStock(title, quant))) {
                    System.out.println("I'm sorry this book is not in stock.");
                }
                else {
                    System.out.println("How many copies would you like to buy?");
                    quant = input.nextInt();
                    if(bookstore.inStock(title, quant)) {
                    bookstore.sellBook(title, quant);
                    System.out.println("You just bought " + quant +" copies of " + title);
                    }
                    else
                        System.out.println("Error: Not enough copies in stock for your purchase."); break;
//this is a part of the demo class that I use to try to sell the book.

Ответы [ 2 ]

1 голос
/ 24 октября 2019

Проблема действительно в вашем методе inStock - оператор return немедленно останавливает выполнение метода. У других книг нет никаких шансов, кроме первой, которая будет проверена на наличие. На самом деле, вам нужно только два оператора возврата:

for (int i = 0; i < totalbooks; i++) {
    if(title.equals(books[i].getTitle())) {
        return quantity <= books[i].getQuantity();
    }
}
return false;
1 голос
/ 24 октября 2019

Проверьте условия:

if(title.equals(books[i].getTitle())) {
    if(quantity <= books[i].getQuantity()) {
       return true;

    }
    else
       return false;
}

else return false; // <-- exits method after first instance of non-matching titles

Обычно по нескольким причинам в методе по нескольким причинам обычно бывает несколько операторов return.

...