使用枚举、方法和用户输入更新的 Java Suit 应用程序

标签 java if-statement input enums menu

enter image description here

我已经读完了这篇论文的所有部分,除了最后一部分(第 5 部分),我已经附上了上面我遇到困难的部分的论文图片。

运行我的应用程序测试器时,当我按 3 时,没有任何反应。有谁知道为什么?我的类(class)代码如下。注意:测试器中 makeChangeToSuit 方法中调用的 updateBrand() 方法位于morningSuit 和suit 类中。

如果对此事有任何帮助,我将不胜感激。

package SuitProg;

import java.util.Scanner;

public abstract class Suit {

    //instance variables
    private String Colour;
    private double dailyCost;
    private int trouserLength;
    private int jacketChestSize;
    private boolean available;
    protected double totalPrice;

    //constructor
    public Suit(String colour, double dailyCost, int trouserLength, int jacketChestSize, boolean available) {
        super();
        Colour = colour;
        this.dailyCost = dailyCost;
        this.trouserLength = trouserLength;
        this.jacketChestSize = jacketChestSize;
        this.available = available;
        this.totalPrice = totalPrice;
    }

    //accessors & mutators
    public String getColour() {
        return Colour;
    }

    public double getDailyCost() {
        return dailyCost;
    }

    public int getTrouserLength() {
        return trouserLength;
    }

    public int getJacketChestSize() {
        return jacketChestSize;
    }

    public boolean getAvailability() {
        return available;
    }

    public double getTotalPrice() {
        return totalPrice;
    }

    public void setDailyCost(double dailyCost) {
        this.dailyCost = dailyCost;
    }

    public void setTrouserLength(int trouserLength) {
        this.trouserLength = trouserLength;
    }

    public void setJacketChestSize(int jacketChestSize) {
        this.jacketChestSize = jacketChestSize;
    }

    public void setAvailability(boolean available) {
        this.available = available;
    }

    //methods
    public String toString() {
        return " Suit [ Colour: " + getColour() + ", Daily Cost: " + String.format("%.2f", getDailyCost()) 
        + "\nTrouser Length: " + getTrouserLength() + ", Jacket Chest Size: " + getJacketChestSize()
        + " Is it available? " + getAvailability();
    }

    public void calcTotalPrice (int numDaysHired) {
        totalPrice = totalPrice + (getDailyCost() * numDaysHired);
    }

    public String printDailyCost() {
        getDailyCost();
        return "£" + String.format("%.2f", getDailyCost());
    }

    public void makeChange(Scanner input) {
        boolean valid = false;
        do { 
            System.out.println("Are you sure you want to change the branding of a suit?");
            String response = input.nextLine().toLowerCase();
            if (response.equalsIgnoreCase("Y")) {
                valid = true;
                updateBrand(null);
            }
            else 
                if (response.equalsIgnoreCase("N")) {
                    valid = true;
                    System.exit(0);
                    break;
                }
        } while (!valid);
    }

    public void updateBrand(Scanner input) {
        boolean valid = false;
        int selection;
        System.out.println("The list of available brands are below:");
        System.out.println("1 - " + Brand.Highstreet);
        System.out.println("2 - " + Brand.TedBaker);
        System.out.println("3 - " + Brand.FrenchConnection);
        do {
            System.out.println("Please enter the number of the Brand you wish to change.");
            if (input.hasNextInt()) {
                selection = input.nextInt();
                if (selection < 1 || selection > 3) {
                    valid = false;
                System.out.println("Please enter a number betwen 1 and 3");
                } else
                    valid = true;
                    System.out.println("You have selected number: " + selection);
                    if (selection == 1) {
                        System.out.println("Please enter the changes you want to make");
                        System.out.println("New brand name : ");
                        //
                    }
            }

        } while (!valid);
    }


}

package SuitProg;

import java.util.Scanner;

public class MorningSuit extends Suit implements Brandable {

    //instance variables
    private boolean boutonniere;
    private boolean topHat;
    public Brand brand;

    //constructor
    public MorningSuit(String colour, double dailyCost, int trouserLength, int jacketChestSize, boolean available, boolean boutonniere, boolean topHat) {
        super(colour, dailyCost, trouserLength, jacketChestSize, available);
        this.boutonniere = boutonniere;
        this.topHat = topHat;
    }

    //accessors & mutators
    public boolean getBout() {
        return boutonniere;
    }

    public boolean getTopHat() {
        return topHat;
    }

    public void setBout(boolean boutonniere) {
        this.boutonniere = boutonniere;
    }

    public void setTopHat(boolean topHat) {
        this.topHat = topHat;
    }

    public void setBrand(Brand brand) {
        this.brand = brand;
    }

    //methods
    public String toString() {
        return "Morning Suit [ Boutonniere " + getBout() + " TopHat " + getTopHat() + " Colour: " + getColour() + ", Daily Cost: £" + String.format("%.2f", getDailyCost()) 
        + "\nTrouser Length: " + getTrouserLength() + ", Jacket Chest Size: " + getJacketChestSize()
        + " Is it available? " + getAvailability() + "]";
    }

    public void calcTotalPrice(int numDaysHired) {
        if (getBout()) {
            totalPrice = totalPrice + 3;
        }
        if (getTopHat()) {
            totalPrice = totalPrice + 10;
        }
        totalPrice = totalPrice + (numDaysHired * getDailyCost());
        System.out.println("The morning suit was hired for " + numDaysHired + " days.");
        System.out.println("The total cost for the hire was: £" + String.format("%.2f", totalPrice));
    }

    public String getBrand() {
        return "The brand of this Morning Suit is " + brand.toString().toLowerCase();
    }

    public void makeChange(Scanner input) {
        boolean valid = false;
        do { 
            System.out.println("Are you sure you want to change the branding of a suit?");
            String response = input.nextLine().toLowerCase();
            if (response.equalsIgnoreCase("Y")) {
                valid = true;
                updateBrand(input);
            }
            else 
                if (response.equalsIgnoreCase("N")) {
                    valid = true;
                    System.exit(0);
                    break;
                }
        } while (!valid);
    }

    public void updateBrand(Scanner input) {

        boolean valid = false;
        int selection;
        System.out.println("The list of available brands are below:");
        System.out.println("1 - " + Brand.Highstreet);
        System.out.println("2 - " + Brand.TedBaker);
        System.out.println("3 - " + Brand.FrenchConnection);
        do {
            System.out.println("Please enter the number of the Brand you wish to change.");
            if (input.hasNextInt()) {
                selection = input.nextInt();
                if (selection < 1 || selection > 3) {
                    valid = false;
                System.out.println("Please enter a number betwen 1 and 3");
                } else
                    valid = true;
                    System.out.println("You have selected number: " + selection);
                    if (selection == 1) {
                        System.out.println("Please enter the changes you want to make");
                        System.out.println("New brand name : ");
                        //
                    }
            }

        } while (!valid);
    }


}
package SuitProg;

public enum Brand {

    Highstreet,TedBaker,FrenchConnection
}

package SuitProg;

public interface Brandable {

    public String getBrand();
}

package SuitProg;

import java.util.Scanner;

public class EveningSuit extends Suit implements Brandable {

    //variables
    private boolean cufflinks;
    private boolean waistcoat;
    public Brand brand;

    public EveningSuit(String colour, double dailyCost, int trouserLength, int jacketChestSize, boolean available, boolean cufflinks, boolean waistcoat) {
        super(colour, dailyCost, trouserLength, jacketChestSize, available);
        this.cufflinks = cufflinks;
        this.waistcoat = waistcoat;
        this.brand = Brand.Highstreet;
    }

    //accessors & mutators
    public boolean getCuffs() {
        return cufflinks;
    }

    public boolean getWaistcoat() {
        return waistcoat;
    }

    public void setCuffs(boolean cufflinks) {
        this.cufflinks = cufflinks;
    }

    public void setWaistcoat(boolean waistcoat) {
        this.waistcoat = waistcoat;
    }


    //methods
    public String toString() {
        return "Evening Suit [ Cufflinks " + getCuffs() + " Waistcoat " + getWaistcoat() + " Colour: " + getColour() + ", Daily Cost: £" + String.format("%.2f", getDailyCost()) 
        + "\nTrouser Length: " + getTrouserLength() + ", Jacket Chest Size: " + getJacketChestSize()
        + " Is it available? " + getAvailability() + "]";
    }

    public void calcTotalPrice (int numDaysHired) {
        if (getCuffs()) {
            totalPrice = totalPrice + 5;
        }
        if (getWaistcoat()) {
            totalPrice = totalPrice + 10;
        }
        totalPrice = totalPrice + (getDailyCost() * numDaysHired);
        System.out.println("The evening suit was hired for " + numDaysHired + " days.");
        System.out.println("The total cost for the hire was: £" + String.format("%.2f", totalPrice));
    }

    public String getBrand() {
        return "The brand of this Evening Suit is " + brand.toString().toLowerCase();
    }

    public void makeChange(Scanner input) {
        boolean valid = false;
        do { 
            System.out.println("Are you sure you want to change the branding of a suit?");
            String response = input.nextLine().toLowerCase();
            if (response.equalsIgnoreCase("Y")) {
                valid = true;
                System.out.println("You can not change the brand name of an evening suit.");
            }
            else 
                if (response.equalsIgnoreCase("N")) {
                    valid = true;
                    System.exit(0);
                    break;
                }
        } while (!valid);
    }
}

package SuitProg;

import java.util.ArrayList;
import java.util.Scanner;

public class Tester05 {

    public static void main(String[] args) {

        //create arrayList of suits
        ArrayList<Suit> suits = new ArrayList<Suit>();

        //create morningSuit object
        MorningSuit MorningSuit1 = new MorningSuit("Black", 80.00, 32, 36, true, true, false);
        MorningSuit1.setBrand(Brand.FrenchConnection);
        //create evening suit
        EveningSuit EveningSuit1 = new EveningSuit("White", 70.25, 34, 36, true, true, true);


        //add suits to arrayList
        suits.add(MorningSuit1);
        suits.add(EveningSuit1);

        //print all details of arrayList
        for (Suit eachSuit : suits) { 
            System.out.println(eachSuit .toString()+"\n"); 
        }

        System.out.println(MorningSuit1.getBrand());
        System.out.println(EveningSuit1.getBrand());

        printMenu(suits);
    }

    public static void printMenu(ArrayList<Suit> suits) {
        Scanner input = new Scanner(System.in);
        System.out.println("----------------Suit Hire-----------------");
        System.out.println("What would you like to do?");
        System.out.println("\n1)Display all suits\n2)Display available suits\n3)Change Suit brand\n4)Finished");
        System.out.println("Please select an option: ");
        int selection = input.nextInt();
        if (selection == 1) {
            displayAllSuits(suits);
        } else
            if (selection == 2) { 
            displayAllSuits(suits);
            }
            else
                if (selection ==3) {
                    makeChangeToSuits(suits, input);
                }
                else 
                    if (selection ==4) {
                        System.out.println("You are now exitting the system.");
                        System.exit(0);
                    }
    }

    public static void makeChangeToSuits(ArrayList<Suit> suits, Scanner input) {
                for (int i = 0; i > suits.size(); i ++) {
                    suits.get(i).updateBrand(input);
                }
    }

    public static void displayAllSuits(ArrayList<Suit> suits) {
        for (Suit eachSuit : suits) { 
            System.out.println(eachSuit .toString()+"\n"); 
        }
    }

    public static void displayAvailableSuits(ArrayList<Suit> suits) {
        for (int i = 0; i > suits.size(); i++) {
            if (suits.get(i).getAvailability()) {
                System.out.println(suits.get(i).toString());
            }
        }
    }

}

最佳答案

当您迭代列表时,问题出在您的 makeChangeToSuits 方法中。它应该看起来像:

    public static void makeChangeToSuits(ArrayList<Suit> suits, Scanner input) {
            for (Suit suit : suits) {
                suit.updateBrand(input);
            }
    }

此外,您的 displayAvailableSuits 方法应如下所示:

    public static void displayAvailableSuits(ArrayList<Suit> suits) {
        for (Suit suit : suits) {
            if (suit.getAvailability()) {
                System.out.println(suit.toString());
            }
        }
    }

关于使用枚举、方法和用户输入更新的 Java Suit 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36453783/

相关文章:

c++ - 使用 C++ 并尝试 "nest"一些代码

java - 如何在 Maven 中按类别运行 JUnit 测试?

java - 如何制作安卓:lineSpacingMultiplier behaves same for both EditText and TextView

java - IntelliJ-如何找到方法调用?

java - 如何从 JTextpane 中选定的文本获取样式?

JavaScript:鼠标滚轮事件在文本框上方时不会触发

Java - 条件始终为真/假(Android 复选框)

class - 为什么 ifelse 将 data.frame 转换为列表 : ifelse(TRUE, data.frame(1), 0)) != data.frame(1)?

c - 这两种代码有什么区别?我不知道,即使他们输出不同的值

android - 编辑文本 : Differentiate between text change by setText() or by keyboard input