【问题标题】:Creating an Array from multiple user inputs of different types从不同类型的多个用户输入创建一个数组
【发布时间】:2013-07-18 04:42:01
【问题描述】:

我如何将用户输入项(名称、成本、优先级)中的 3 个项目放入一个对象项中,并将该对象项放入一组其他对象中?

public class Main {

    public static void main(String[] args) {
       //here are my variables.  
       //I'm pretty sure a few of these should be defined 
       //  in their own item class. 
       int i=0;
       String name1;
       int priority1; 
       double cost1;

       //String[] shoppingList = new String[7];
       String[] item  = new String[7];

       // I am able to grab input from the user for all 3 elements of 
       //   an item object (name, cost, priority)
       // I am missing how to save these 3 elements into an item object 
       //  and create an array for each item object
       for (i=0; i<item.length;i++)  {

          //I want to capture name, priority, and cost of each item
          //  and add each item as an in
           Scanner keyboard = new Scanner(System.in);
           System.out.println("Enter item name " + i);
           String name = keyboard.next();

           Scanner keyboard2 = new Scanner(System.in);
           System.out.println("Enter the price of item " + i);
           double cost = keyboard2.nextDouble();

           Scanner keyboard3 = new Scanner(System.in);
           System.out.println("Enter Priority Number " + i);
           int priority = keyboard3.nextInt();

【问题讨论】:

    标签: java arrays class object


    【解决方案1】:

    您可以尝试自定义类:

    public class Item {
        private String name;
        private double price; // you should probably use an 'int' for this
                              // it would be the amount of cents
                              // that would avoid rounding errors
        private int priority;
        public Item(String name, double price, int priority) {
            this.name = name;
            this.price = price;
            this.priority = priority;
        }
        // (getters and setters)
        public String getName() {
            return name;
        }
        ...
    }
    
    Item milk = new Item("milk", 19.99, 3); // wow, expensive milk :P
    Item[] items = [milk, new Item("cheese", 99.99, 2), ...];
    

    【讨论】:

      【解决方案2】:

      “我如何将用户输入项目(名称、成本、优先级)中的 3 个项目转换为一个对象项目”

      如果我理解正确,解决方案是创建一个新课程。将其命名为与您正在做的事情相关的任何内容

      class Data {
          String name;
          double cost;
          int priority;
          Data(String name, double cost, int priority) { //Set variables }
      }
      

      然后您可以使用您的相关信息创建一个新的“数据”类:

      Data myObject = new Data("Input1", 37.50, 2);
      

      例如,随机信息。您可以根据需要制作任意数量的这些独特对象,并将它们添加到数组或 ArrayList 中,具体取决于您想要执行的操作:

      Data[] myArray = new Data[100];
      //or
      List<Data> myList = new ArrayList<Data>();
      

      【讨论】:

      • 你的意思是“然后你可以创建一个新的'数据'对象”对吗?
      • @DimiDak 没错,您从类中创建对象(可以将其视为对象创建的定义/模板)。
      • 谢谢,你好像对java很了解。这是否可以完成您的答案,包括用户输入等?我正在尝试结合下面的答案并根据我的问题进行调整。
      【解决方案3】:

      您的物品类别:

      class Item {
          String name;
          double cost;
          int priority;
          Item(String name, double cost, int priority) { 
              this.name = name;
              this.cost = cost;
              this.priority = priority;
          }
      }
      

      “对象数组”在 Java 中是用词不当,因为数组具有固定长度的元素。 我认为假设您的所有 Item 对象都具有相同的大小是不安全的。

      使用“列表”——或者在 Java 中,使用“ArrayList”

      ArrayList<Item> myCart = new ArrayList<Item>();
      

      创建项目对象:

      Item myItem = new Item('cheese', 42.12, 1);  //cheese is good
      

      将商品添加到购物车:

      myCart.add(myItem);
      

      http://javarevisited.blogspot.com/2011/05/example-of-arraylist-in-java-tutorial.html
      http://docs.oracle.com/javase/7/docs/api/java/util/ArrayList.html Creating an Arraylist of Objects

      【讨论】:

        【解决方案4】:

        您应该尝试创建一个用户定义类型,它充当数据结构来保存您想要的值。

        由于 java 是一种面向对象的语言,您可以使用类创建用户定义类型。下面,我创建了一个名为 Item 的类,其中包含三个成员数据变量。此类是所有 Item 类型对象的蓝图。每当您创建一个新的项目对象时,它都会拥有自己的成员数据变量的唯一副本。

        为简单起见,我没有封装成员数据变量,但对于以后的程序,您应该将成员数据变量声明为私有并提供访问/修改它们的接口。将它们公开在这里让我可以方便地使用点 (.) 运算符访问它们。

        查看以下代码以获取工作示例

        import java.util.ArrayList;
        import java.util.List;
        import java.util.Scanner;
        
        
        public class Item {
        
        public String name;
        public int priority;
        public double cost;
        
        public static void main(String[] args) {
        
        
        int itemAmount = 7;
        List<Item> itemList = new ArrayList<Item>();
        
        
            for (int i=0; i < itemAmount; i++)  {
                Item itemToCreate = new Item(); 
                Scanner keyboard = new Scanner(System.in);
                System.out.println("Enter item name " + i);
                itemToCreate.name = keyboard.next();
        
        
                Scanner keyboard2 = new Scanner(System.in);
                System.out.println("Enter the price of item " + i);
                itemToCreate.cost = keyboard2.nextDouble();
        
                Scanner keyboard3 = new Scanner(System.in);
                System.out.println("Enter Priority Number " + i);
                itemToCreate.priority = keyboard3.nextInt();
        
                itemList.add(itemToCreate);
            } // end for
        
            for (int i=0; i < itemList.size(); i++) {
                Item tempItem = itemList.get(i);
                System.out.println("Item " + tempItem.name + " has cost " + tempItem.cost + " with priority " + tempItem.priority);
            }
        
        
        
        } // end main
        
        } // end class
        

        您应该注意到我用 ArrayList 数据结构替换了您的原始声明。这是一种动态数据结构,可以随着您向其中插入项目而增长。您应该接受允许无限量的用户输入并在列表中考虑未知数量的 Item 对象的挑战。

        希望这会有所帮助!

        【讨论】:

        • 是的,那里有很多乐于助人的人,我感谢大家!关于如何让我的主要方法停止出现语法错误的任何建议?公共静态 void main(String[] args() {
        • public static void main(String[] args) {
        【解决方案5】:

        你可以做的是创建一个类,并使用构造函数来帮助传递参数。然后,您可以创建此类的一个实例,并使用它将参数设置为您需要的任何参数(即名称、价格等)。然后使用Scanner 接受用户输入,我要做的是创建一个ArrayList of(我称之为ItemData)。然后,使用.add(this) 将实例添加到ArrayList。这是每个步骤的代码:

        1. 在构造函数中传递参数:

          public class ItemData{
              public ItemData(String name, double cost, int priority){
              }
          }
          
        2. 在输入末尾的Main 类中创建ItemData 的新实例:

          ItemData itemData = new ItemData(name, cost, priority);
          
        3. 创建ArrayList 字段(确保导入java.util.ArrayListjava.util.List):

          List<ItemData> dataStorage = new ArrayList<ItemData>();
          
        4. ItemData的实例添加到ArrayListItemData构造函数中:

          Main.(ArrayList name here).add(this);
          

        您的最终代码应如下所示:

        public class ItemData{
            public ItemData(String name, double cost, int priority){
                Main.itemData.add(this);
            }
        }
        
        
        import java.util.*;
        public class Main {
            public static List<ItemData> itemData = new ArrayList<ItemData>();
            public static void main(String[] args) {
                int i=0;
                String name1;
                int priority1; 
                double cost1;
                String[] item  = new String[7];
                for (i=0; i<item.length; i++)  {
                    Scanner keyboard = new Scanner(System.in);
                    System.out.println("Enter item name " + i);
                    String name = keyboard.next();
                    Scanner keyboard2 = new Scanner(System.in);
                    System.out.println("Enter the price of item " + i);
                    double cost = keyboard2.nextDouble();
                    Scanner keyboard3 = new Scanner(System.in);
                    System.out.println("Enter Priority Number " + i);
                    int priority = keyboard3.nextInt();
                    ItemData x = new ItemData(name, cost, priority);
                }
            }
        }
        

        【讨论】:

        • 那个构造函数看起来非常简单快捷。我通常不写java。这是定义和设置 this.name、this.cost 和 this.priority 的捷径吗?
        • 在intellij中:右键-->生成-->构造函数(或者mac中的cmd+N)
        猜你喜欢
        • 1970-01-01
        • 2020-03-05
        • 2019-12-21
        • 1970-01-01
        • 1970-01-01
        • 2017-10-10
        • 2021-01-18
        • 2011-11-30
        • 2023-01-04
        相关资源
        最近更新 更多