使用用户输入创建新对象 [JAVA]

2023-12-07

您好,我正在尝试创建一个程序,每当用户输入某个对象的新信息时就创建一个新对象。目前我有这个。

import java.util.Scanner;
public class Main
{
    public static void main (String args[]) 
{
    String input;
    Scanner scanner = new Scanner(System.in);
    do
    {
        System.out.println("Computer Menu");  
        System.out.println("1. Add a new Desktop Information");
        System.out.println("2. Add a new Laptop Information");
        System.out.println("3. Display all Computer Information");
        System.out.println("4. Quit");

        System.out.print("Please enter either 1 to 4: "); 
        input =(scanner.nextLine());
        if (input.equals("1"))
        {
            Desktop desktop1 = new Desktop();
            System.out.println("Please enter Desktop ID: ");
            desktop1.setID (scanner.nextLine());
            System.out.println("Please enter Desktop Processor Speed: ");
            desktop1.setProcess (Double.parseDouble(scanner.nextLine()));
            System.out.println("Please enter Desktop RAM: ");
            desktop1.setRam (Double.parseDouble(scanner.nextLine()));
            System.out.println("Please enter Desktop Harddisk Space: ");
            desktop1.setDisk (Double.parseDouble(scanner.nextLine()));
            System.out.println("Please enter Desktop Monitor Type: ");
            desktop1.setMonitor (scanner.nextLine());
            System.out.println("Please enter Desktop Price: ");
            desktop1.setPrice (Double.parseDouble(scanner.nextLine()));
            desktop1.displayComputer();
        }
        else if (input.equals("2"))
        {
            Laptop laptop1 = new Laptop();
            System.out.println("Please enter Laptop ID: ");
            laptop1.setID (scanner.nextLine());
            System.out.println("Please enter Laptop Processor Speed: ");
            laptop1.setProcess (Double.parseDouble(scanner.nextLine()));
            System.out.println("Please enter Laptop RAM: ");
            laptop1.setRam (Double.parseDouble(scanner.nextLine()));
            System.out.println("Please enter Laptop Harddisk Space: ");
            laptop1.setDisk (Double.parseDouble(scanner.nextLine()));
            System.out.println("Please enter Laptop Weight: ");
            laptop1.setWeight (Double.parseDouble(scanner.nextLine()));
            System.out.println("Please enter Laptop Price: ");
            laptop1.setPrice (Double.parseDouble(scanner.nextLine()));
            laptop1.displayComputer();
         }

计算机超级班

public class Computer
{
    String ID;
    double process;
    double ram;
    double disk;
    double price;

    void setID (String _id)
    {
        ID = _id;
    }
    void setProcess (double _Process)
    {
        process = _Process;
    }
    void setRam (double _Ram)
    {
        ram = _Ram;
    }
    void setDisk (double _Disk)
    {
        disk = _Disk;
    }
    void setPrice (double _Price)
    {
        price = _Price;
    }

    String getID()
    {
        return ID;
    }
    double getProcess()
    {
        return process;
    }
    double getRam()
    {
        return ram;
    }
    double getDisk()
    {
        return disk;
    }
    double getPrice()
    {
        return price;
    }

    void displayComputer()
    {
        System.out.println("Computer ID: " + getID());
        System.out.println("Processor Speed: " + getProcess());
        System.out.println("RAM: " + getRam());
        System.out.println("Harddisk: " + getDisk());
        System.out.println("Price: " + getPrice());
    }
}

桌面子类

public class Desktop extends Computer
{
    String monitor;

    void setMonitor (String _Monitor)
    {
        monitor = _Monitor;
    }
    String getMonitor()
    {
        return monitor;
    }

    void displayComputer()
    {
        System.out.println("Computer ID: " + getID());
        System.out.println("Processor Speed: " + getProcess());
        System.out.println("RAM: " + getRam());
        System.out.println("Harddisk: " + getDisk());
        System.out.println("Monitor Type: " + getMonitor());
        System.out.println("Price: " + getPrice());
        System.out.println("");
    }
}

笔记本电脑子类

public class Desktop extends Computer
{
    double Weight;

    void setWeight(String _Weight)
    {
        Weight= _Weight;
    }
    String getWeight()
    {
        return Weight;
    }

    void displayComputer()
    {
        System.out.println("Computer ID: " + getID());
        System.out.println("Processor Speed: " + getProcess());
        System.out.println("RAM: " + getRam());
        System.out.println("Harddisk: " + getDisk());
        System.out.println("Weight: " + getWeight());
        System.out.println("Price: " + getPrice());
        System.out.println("");
    }
}

所以有一个类和两个子类,但我认为这并不重要。因此,如果我输入 1,它应该为桌面创建一个新对象,如果我输入 2,它将为笔记本电脑创建一个新对象。当我输入 3 时,它应该显示创建的所有对象。我不知道如何让他们中的任何一个工作,请帮忙。


根据您提供的限制信息,我尝试解决该问题:

  1. 我没有向 Desktop 和 Laptop 类添加任何属性,而是重写这两个类中的 toString 方法,即

public class Laptop {
    public String toString() {
        return "Laptop [getClass()=" + getClass() + ", hashCode()="
                + hashCode() + ", toString()=" + super.toString() + "]";
    }
}

public class Desktop {
    public String toString() {
        return "Desktop [getClass()=" + getClass() + ", hashCode()="
                + hashCode() + ", toString()=" + super.toString() + "]";
    }
}

您的 Main 方法如下所示:

public static void main (String args[]) 
    {
        String input;
        Scanner scanner = new Scanner(System.in);
        List<Object> listOfObject = new ArrayList<>();
        do
        {
            System.out.println("Computer Menu");  
            System.out.println("1. Add a new Desktop Information");
            System.out.println("2. Add a new Laptop Information");
            System.out.println("3. Display all Computer Information");
            System.out.println("4. Quit");

            System.out.print("Please enter either 1 to 4: "); 
            input =(scanner.nextLine());
            if (input.equals("1")){
                Desktop desktop1 = new Desktop();
                listOfObject.add(desktop1);
            }else if (input.equals("2")){
                Laptop laptop1 = new Laptop();
                listOfObject.add(laptop1);
             }else if(input.equals("3")){
                 for(Object obj : listOfObject){
                     if(obj instanceof Desktop){
                        Desktop d1 = (Desktop)obj;
                        System.out.println(d1.toString());
                     }else if(obj instanceof Laptop){
                         Laptop l1 = (Laptop)obj;
                         System.out.println(l1.toString());
                     }
                 }
             }
        }while(!input.equals("4"));
    }
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用用户输入创建新对象 [JAVA] 的相关文章

随机推荐

  • 为什么在 Skylake-Xeon 上写入 2 个缓存行的部分内容时,`_mm_stream_si128` 比 `_mm_storeu_si128` 慢很多?但对Haswell影响较小

    我的代码如下所示 简单加载 修改 存储 我已简化它以使其更具可读性 asm volatile vzeroupper while m128i in mm loadu si128 inptr m128i out in real code doe
  • 我可以在 PostgreSQL 中自动从带有标题的 csv 文件创建表吗?

    我在 OS X 10 6 8 上运行 PostgreSQL 9 2 6 我想将带有列标题的 CSV 文件中的数据导入到数据库中 我可以用COPY语句 但前提是我首先手动创建一个表 并为 CSV 文件中的每一列创建一个列 有什么方法可以根据
  • 相当于不依赖innerHTML的html_entity_decode的javascript?

    我正在寻找 PHP 的 javascript 版本html entity decode 我找到了这个 function html entity decode str var tarea document createElement text
  • 启动第二个 JavaFX 应用程序

    我正在尝试从 JavaFx 应用程序中启动 JavaFx 应用程序 但看起来 Application launch 只能调用一次 这是否意味着我必须启动一个单独的 JVM 如 exec java 或者还有其他方法吗 更多背景信息 我希望我的
  • 从函数中的列表中返回项目。蟒蛇[重复]

    这个问题在这里已经有答案了 my list a b c def func input for i in input print i print func my list Output a b c None 我不想要 无 所以如何执行一行代码
  • UIScrollView 不随 UItextfields 一起滚动

    我正在制作一个普通视图 用户可以在其中更新他们的个人资料 我按照以下步骤制作了该视图 创建了一个新的UIViewController带有 xib 文件 Added a UIScrollView在超级视图中 添加了近9个UITextField
  • 使用 .onLoad 加载依赖包

    我的包需要 ggplot2 包 但我无法修复运行 R CMD 检查时得到的以下注释 no visible global function definition for qplot library or require call not de
  • 这个比较器是如何工作的?

    package vehicles order import java util ArrayList import java util Collections import java util Iterator public class ve
  • 理解 let 与 var 提升 [重复]

    这个问题在这里已经有答案了 With let vs var我了解到主要区别在于 let 变量的作用域为最近的块并且不会被提升 也让变量可以重新赋值 但不能在同一作用域内重新声明 那么为什么这段代码会返回 未定义 错误呢 let x 10 i
  • 将 CGImage 转换为 python 图像 (pil/opencv)

    我想在屏幕上进行一些模式识别 并将使用 Quartz PyObjc 库来获取屏幕截图 我得到的屏幕截图是 CGImage 我想使用 openCV 库搜索其中的模式 但似乎找不到如何将数据转换为 opencv 可读的 所以我想做的是 get
  • 如何重新组装 javap 生成的 java 字节码? [复制]

    这个问题在这里已经有答案了 我希望能够编辑字节码并重新编译为可执行类文件 我不知道该怎么做 我尝试使用 javap c 和 v 进行反编译 编辑一些内容 然后将其更改回我的 Class 文件 但出现错误 错误 无法找到或加载主类 Test
  • 如何在 Python 中使用 mutagen 将封面图像添加到 mp3 文件?

    下面的代码似乎没有更新 mp3 文件的插图 代码 from mutagen id3 import ID3 APIC audio ID3 musicFilename with open coverFilename rb as albumart
  • Java 中 == 和 .equals 之间的区别。

    我知道这已经被涵盖了 但我在这里看到了不一致的论点 所以如果我有 String a apple2e String b apple2e System out println a b a b I get FALSE 据我了解 这是因为a and
  • 将工件添加到标准 Maven 部署

    我希望有人可以帮助我进行 Maven 部署 通常通过发布插件运行 我想在发布时将除了打包的 jar 之外的文件部署到存储库 例如特定的说明文档和生成的 SQL 文件 如果我不必使用就好了deploy deploy file为每一个 如果我可
  • 如何控制 PyYAML 对我的数据使用哪种标量形式?

    我有一个具有短字符串属性和长多行字符串属性的对象 我想将短字符串写为 YAML 带引号的标量 将多行字符串写为文字标量 my obj short Hello my obj long Line1 nLine2 nLine3 我希望 YAML
  • 用户身份验证后重定向回页面选项卡?

    在用户验证我的应用程序后 我应该如何将用户重定向回我的页面选项卡 我无法输入一个特定的网址进行重定向 因为我的应用程序将驻留在多个页面上 所以我需要以某种方式获取页面的 id 并将其放入 url 中 我尝试过使用会话变量 但它似乎对我不起作
  • PHP 四舍五入不起作用

    我有这个代码 我想将两位小数四舍五入到一半 我期望值为 0 58 但上面的代码打印 0 57 我怎样才能做到这一点 如果您期望 0 58 则不必使用 半轮 而是使用 ceil 函数 v 0 575 echo ceil v 100 100 s
  • SQLAlchemy 中的编译扩展:索引中使用的函数

    我想在 SQLAlchemy 中创建一个不区分大小写的唯一约束 它可以与 Postgres 和 SQLite 一起使用 在Postgres中是这样实现的 SQL CREATE UNIQUE INDEX my index ON my tabl
  • 删除前面没有 NULL 的换行符

    我有一串数据 在我需要删除的行中插入了随机 CRLF 并以正确的 CRLF 结束了我需要保留的数据 我尝试使用 Notepad 正则表达式尝试将以下内容替换为空 NULL r n 但是 它不会删除插入的 CRLF 关于如何在 Notepad
  • 使用用户输入创建新对象 [JAVA]

    您好 我正在尝试创建一个程序 每当用户输入某个对象的新信息时就创建一个新对象 目前我有这个 import java util Scanner public class Main public static void main String