我正在尝试预约项目,您可以添加,显示,删除约会。
我有三个课程:UserInput
,Appointment
,Planner
。
UserInput
:只是为了促使用户输入任何内容(int
,double
等等。)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;
}
}
谢谢大家。
答案 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();