Java 使用类重新排列代码?

Java 使用类重新排列代码?,java,class,Java,Class,我目前正在做一个分配给我的项目,我在想如何开始时遇到了一些困难。这个任务是用类重写一个程序,而不是把所有的东西都放到主程序中。以下是我创建的需要重写的代码: public class Lab14 { public static void main(String[] args) { int Numbook1=0; int Numbook2=0; int Numbook3=0; double priceOfDesignPatterns=32.46; double priceOfEffectiveJ

我目前正在做一个分配给我的项目,我在想如何开始时遇到了一些困难。这个任务是用类重写一个程序,而不是把所有的东西都放到主程序中。以下是我创建的需要重写的代码:

public class Lab14 {
public static void main(String[] args)  {
int Numbook1=0;
int Numbook2=0;
int Numbook3=0;
double priceOfDesignPatterns=32.46;
double priceOfEffectiveJava=35.48;
double priceOfJavaPuzzlers=27.86;
String book1="Design Patterns";
String book2="Effective Java";
String book3="Java Puzzlers";
final double SALES_TAX=.065;
String choice;
int finished=0;


Scanner input=new Scanner(System.in);
System.out.println("Welcome to ECommerce!");
System.out.println("The books we have in stock are: ");
System.out.println(book1+", "+book2+", "+book3);
System.out.println("Please enter the name of the book you wish to purchase.  Press 'q' to quit.");

while (finished==0) 
{
choice=input.nextLine();
    if (choice.equals(book1))   
    {
        System.out.println("How many "+book1+"(s) do you wish to buy?");
        Numbook1=(input.nextInt())+Numbook1;
        System.out.println(Numbook1+" copies of "+book1+" are in your cart.");
        System.out.println("Enter the name of the next book you would like to purchase, or press 'q' to quit.");
    }
    else if (choice.equals(book2))
    {
        System.out.println("How many "+book2+"(s) do you wish to buy?");
        Numbook2=(input.nextInt())+Numbook2;
        System.out.println(Numbook2+" copies of "+book2+" are in your cart.");
        System.out.println("Enter the name of the next book you would like to purchase, or press 'q' to quit.");
    }
    if (choice.equals(book3))
    {
        System.out.println("How many "+book3+"(s) do you wish to buy?");
        Numbook3=(input.nextInt())+Numbook3;
        System.out.println(Numbook3+" copies of "+book3+" are in your cart.");
        System.out.println("Enter the name of the next book you would like to purchase, or press 'q' to quit.");
    }
    if (choice.equals("q"))
    {
        double total=0;
        double totalTax=0;

        total=(Numbook1*priceOfDesignPatterns)+(Numbook2*priceOfEffectiveJava)+(Numbook3*priceOfJavaPuzzlers);
        totalTax=total*SALES_TAX;
        System.out.println("Your cart contains: ");
        System.out.println(Numbook1+" "+book1+"(s), "+Numbook2+" "+book2+"(s), "+Numbook3+" "+book3+"(s).");
        System.out.println("Sales Tax: $"+totalTax);
        System.out.println("Your total cost is: $"+(totalTax+total));
        finished=1;
    }
}
}
}

现在我知道我必须编写几个类来构造
book1,2,3
,还要设置价格并在以后访问它们,但我真的不知道如何开始这个过程并将所有内容聚合在一起。如果有人能指引我正确的方向,我将不胜感激!非常感谢。

我将尝试引导您找到解决方案。代码的结构可能如下所示:

class Book {

    String name;
    double price;

    Book(String name, double price) {
        this.name = name;
        this.price = price;
    }

    public double getPrice() {
        return this.price;
    }

    public String getName() {
        return this.name;
    }

}
您可以使用这个
Book
类来定义所有书籍。自己为这个类编写
set
方法。可以对类变量使用set-get方法,以便于访问和修改。接下来,您可以使用类似下面的
Cart
类来跟踪用户选择的所有书籍

class Cart {

    ArrayList<Book> books;

    Cart() {
        books = new ArrayList<>();
    }

    public void addToCart(Book book) {
        books.add(book);
    }

    public ArrayList<Book> getCart() {
        return books;
    }

}
class购物车{
ArrayList书籍;
购物车(){
books=新数组列表();
}
公共无效地址(书籍){
图书。添加(图书);
}
公共ArrayList getCart(){
还书;
}
}
我将要求您自己编写一个
Cost
类,在该类中,您可以计算添加到购物车中的所有书籍的成本,并添加销售税以获得最终成本

然后,您可能会有一个类似于您在代码中提到的处理程序类来定义书籍,为用户生成购物车,并计算购物车的成本


本作业的目的是帮助您了解面向对象编程和建模现实世界问题的基础知识。我希望你能对它的工作原理有所了解

研究你的书,你的笔记,这已经在课堂上得到了最肯定的审查,然后尝试一些东西,任何事情,而不是张贴“我真的迷路了”,然后把所有的书都扔在这里。你有带价格和标题的书(课堂用书)。用于添加书籍的购物车(类购物车)。。。更多信息:(或任何关于这一主题的好书)至少发布你对你认为的一门图书课可能是什么样子的最佳猜测,不要担心尝试的好坏。请给我们一些可以合作的东西。否则我们怎么能知道你可能是如何处理这个错误的?这本质上是大规模的重新分解。您需要慢慢地将事物划分成新的类和方法。经常测试程序以确保没有损坏任何东西。这似乎势不可挡,但缓慢而仔细地说,这是可行的。马丁·福勒的《重构》是一本很棒的参考书。我不知道你是否有时间为当前的作业阅读它,但总的来说,这是一本很棒的书。祝你好运这非常非常有帮助。我想我的问题是我不知道该把什么放在哪里。我唯一的问题是,当我在主程序中调用这些方法时,我如何停止“不能对非静态字段进行静态引用”错误?通过给出填鸭式的答案,你正在对原始海报进行破坏,剥夺了他自己发现代码的机会,你鼓励他们来这里寻求完整的解决方案,而不是首先自己思考。@MarkWilcoxen:你肯定至少知道如何首先寻找事物,对吧。是的,我厌倦了,但是你问了另一个问题,却没有拿出任何证据证明你的努力,因为解决方案很容易找到。@hovercraftfulofeels为了支持我自己和Bhoot,他挑衅地没有给我完整的答案,我仍然需要在他给我看的类中创建方法,以及完全创建另一个方法。他只是简单地给了我一个基本的概述。@hoverfullofeels:我同意这是一个跳跃式的开始,但这不是一个完整的答案。我曾试图引导OP找到一个解决方案,但我提出的方案远远不够准确和完整。OP需要进一步了解并提出准确的解决方案。