将对象存储到数组帮助Java

时间:2016-03-08 04:50:16

标签: java arrays

我正在尝试预约项目,您可以添加,显示,删除约会。

我有三个课程:UserInputAppointmentPlanner

  • UserInput:只是为了促使用户输入任何内容(intdouble等等。)
  • Appointment:设置并获取方法。两个构造函数toString,以及一个使用UserInput类的方法,然后将set方法与输入的值一起使用。
  • Planner:我可以选择删除,显示和添加约会。

我在计划程序类中创建了一个Appointment数组对象,其中包含20个插槽。private Appointment[] array = new Appointment[20];

我面临的问题是向数组添加对象。我尝试为构造函数中的某些插槽分配默认值。我显示了数组,它工作正常。现在我创建了一个方法来调用inputAppointment(要求用户输入然后调用set方法的类)方法并分配输入的内容。

该方法看起来像

public void addAppointment() {
    Appointment object = new Appointment();
    object.inputAppoitment();
    array[5] = object;
}

inputAppointment方法

public void inputAppoitment() {
    UserInput Object = new UserInput();

    System.out.println("Enter The Month");
    setMonth(Object.getString(3, 3));
    System.out.println("Enter The Day");
    setDay(Object.getInt(1, 31));
    System.out.println("Enter The Hour");
    setHour(Object.getInt(1, 24));
    System.out.println("Enter The Minute");
    setMinute(Object.getInt(1, 59));
    System.out.println("Enter A Short Description");
    setMessage(Object.getString(5, 40));

}

我运行该方法然后显示了数组但没有添加任何内容! 我可能看起来太复杂但如果你想要更清楚的东西,我很乐意解释。

更新 我尝试从main而不是我的菜单循环调用方法,它似乎工作。 这就是我的菜单的样子。

while (true) {
        System.out.println("\nPlease Choose.");
        System.out.println("A)dd Appointment , D)elete Appointment , L)ist Appointment , E)xit");
        char userChoice = UserInput.getChar();
        Planner obj = new Planner();
        if (userChoice == 'A' || userChoice == 'a') {
            obj.addAppointment();
        }
        if (userChoice == 'D') {

        }
        if (userChoice == 'L') {
            obj.listAppointment();
        }
        if (userChoice == 'E') {
            break;
        }

    }

谢谢大家。

3 个答案:

答案 0 :(得分:0)

我想建议您使用java swing。它几乎只是用于制作UI的拖放,没有它就很难制作UI。继续前进阵列。

        Integer[] myArray = new Integer[20];

但我建议您改用列表。

          ArrayList myList = new ArrayList();

我在这里给你一些提示。阵列就像一个奥利奥包。每个oreo(而不是整数,字符串或其他类型)都有插槽。而奥利奥包装只能容纳这么多的奥利奥斯。 您必须指定在实例化它时创建数组的对象数量(创建它)。列表就像一个Mary Popins Grocery包。你可以加入橙子,奥利奥斯,苹果和w / e。您也可以在包里放入任意数量的东西。如果你想要,你可以在包(列表)中指定你想要的任何细节级别,所以

   List<MyType> myList = new ArrayList<MyType>();

就像我之前说的那样,尝试使用列表而不是数组。如果您确定数组中有多少项,请仅使用数组。例如,如果你正在模拟一副牌,你知道它将是五十二(不计算笑话等等......)。大多数人会建议您使用arraylist。我知道一开始可能会令人生畏,但试一试。此外,我将假设您不了解继承和多态性,如果您的学习,这是可以的。但是你需要了解在编程中你正在构建对象。然后所有这些对象都进入你的主体(至少对于初学者)。

好的,所以在你开始之前你需要使用java swing 你将花费十个小时(至少当你第一次学习,很快就会是15分钟)使用swing而不是100个小时它是手工制作的。我现在将使用挥杆,并在15分钟内为您提供一个弹出窗口和其他几个功能。

package test;

import java.awt.BorderLayout;
import java.awt.EventQueue;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
 import javax.swing.JLayeredPane;
import javax.swing.JTextField;
import java.awt.GridBagLayout;
import java.awt.GridBagConstraints;
import javax.swing.JLabel;
import javax.swing.JEditorPane;

public class UserInput extends JFrame {

private JPanel contentPane;
private JTextField textField;
private JTextField textField_1;
private JTextField textField_2;
private JTextField textField_3;

/**
 * Launch the application.
 */
public static void main(String[] args) {
    EventQueue.invokeLater(new Runnable() {
        public void run() {
            try {
                UserInput frame = new UserInput();
                frame.setVisible(true);
            } catch (Exception e) {
                e.printStackTrace();
            }

            Appointment test = new Appointment();
            test.setAppointment("w/e you want, maybe the stuff from the windos...");
            test.addToMyList("once again, w/e you want, thurs 10:30, march...");
            System.out.println(test.Appointment);
        }
    });
}

/**
 * Create the frame.
 */
public UserInput() {
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    setBounds(100, 100, 450, 300);
    contentPane = new JPanel();
    contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
    setContentPane(contentPane);
    contentPane.setLayout(null);

    JLabel lblEnterInfo = new JLabel("Enter Info Month");
    lblEnterInfo.setBounds(158, 11, 92, 14);
    contentPane.add(lblEnterInfo);

    textField = new JTextField();
    textField.setBounds(147, 36, 115, 20);
    contentPane.add(textField);
    textField.setColumns(10);

    JLabel lblEnterDay = new JLabel("Enter Day");
    lblEnterDay.setBounds(170, 67, 61, 14);
    contentPane.add(lblEnterDay);

    textField_1 = new JTextField();
    textField_1.setBounds(147, 92, 115, 20);
    contentPane.add(textField_1);
    textField_1.setColumns(10);

    JLabel lblEnterHour = new JLabel("Enter Hour");
    lblEnterHour.setBounds(37, 123, 61, 14);
    contentPane.add(lblEnterHour);

    textField_2 = new JTextField();
    textField_2.setBounds(37, 148, 86, 20);
    contentPane.add(textField_2);
    textField_2.setColumns(10);

    JLabel lblNewLabel = new JLabel("Enter Minute");
    lblNewLabel.setBounds(272, 123, 61, 14);
    contentPane.add(lblNewLabel);

    textField_3 = new JTextField();
    textField_3.setBounds(261, 148, 86, 20);
    contentPane.add(textField_3);
    textField_3.setColumns(10);

    JLabel lblEnterShortDescription = new JLabel("Enter Short Description");
    lblEnterShortDescription.setBounds(147, 179, 120, 14);
    contentPane.add(lblEnterShortDescription);

    JEditorPane editorPane = new JEditorPane();
    editorPane.setBounds(127, 204, 150, 46);
    contentPane.add(editorPane);
}
}

另一个班级,

package test;

import java.util.ArrayList;

public class Appointment {

private ArrayList myList = new ArrayList();
String Appointment;



public String getAppointment() {
return Appointment;
}




public void setAppointment(String appointment) {
   Appointment = appointment;
}




public ArrayList getMyList() {
    return myList;
}




public void setMyList(ArrayList myList) {
    this.myList = myList;
}




public void addToMyList(String x){
    this.myList.add(x);
}

}

相信我的男人。学习java swing。然后了解实例化对象的含义。然后了解列表和数组之间的区别。没人在一夜之间学习编程。花了我们所有6个月到几年才真正学习java。

答案 1 :(得分:0)

您可以使用Arraylist概念将对象添加到Array中。 List list = new ArrayList(); 约会对象=新约会();

使用list方法,您可以根据需要添加删除或检索值。 list.add(对象);

答案 2 :(得分:0)

问题是对象的范围。

public void addAppointment() {
     // this would be unreferenced when the method finishes
    Appointment object = new Appointment();
    object.inputAppoitment();
    array[5] = object; // so now array[5] refers to object;
} // object is no longer in scope, array[5] no longer has a reference to it

我会像这样重写你的代码:

public Appointment addAppointment() {
    // we have to access the reference when the method returns
    Appointment object = new Appointment();
    object.inputAppoitment();
    return object; // we return the reference to object and asign it into array[5]
}

我们称之为:

array[5] = addAppointment();