以下是我的指示:
这项任务已经过期,我的教授说他会评论它以帮助我理解,但我认为他太忙了。它让我的灵魂感到烦恼,我无法做到这一点......我在这里......任何帮助都会很精彩。
待办事项列表
ToDo Notes&提示
附加文件MyList.java是一个简单的命令行驱动的ToDo列表的基本框架。使用此作为ToDo分配的基础。此入门文件中有很多缺失,但它可以帮助您更快地启动和运行。
import java.util.ArrayList;
import java.util.Scanner;
public class MyList {
public static ArrayList todoItems = new ArrayList();
public static void main(String[] args) {
while(true) {
printMenu();
processInput();
}
}
public static void printMenu() {
System.out.println("[a]dd an item");
System.out.println("[p]rint all");
System.out.println("[q]uit");
}
public static void processInput() {
Scanner s = new Scanner(System.in);
String input = s.next();
if(input.equals("a")) {
//addToDoItem();
}
else if(input.equals("p")) {
//printAll();
}
else if(input.equals("q")) {
System.exit(0);
}
}
// implement rest of processInput methods here
}
ToDo计划思考
我们将在本课程的几周内讨论以下几点。我现在包括这些项目,所以你可以开始考虑它们。
如果我们希望按日期或优先级或两者对日期项目进行排序,该怎么办? - 不要写这个,只要想想我们如何做到这一点。
是什么让一个ToDo -item小于,等于或大于另一个?
我们正在编写大量代码来管理ToDoItems数组。如果有的话,我们可以简化这个吗?
我有一个关于该计划演示的视频: https://youtu.be/9eWkn7uOLs0
MyList.java
import java.util.Scanner;
import java.util.ArrayList;
import java.io.*;
import java.text.*;
public class MyList {
public static ArrayList<ToDoItem> toDoItems = new ArrayList<>();
public static Scanner k = new Scanner(System.in);
private static String description;
private static String dueDate;
public static void main(String[] args) throws ParseException {
while(true) {
printMenu();
processInput();
}
}
public static void printMenu() {
System.out.println("[a]dd an item");
System.out.println("[d]elete an item");
System.out.println("[t]oggle complete");
System.out.println("[p]rint all");
System.out.println("[q]uit");
}
public static void processInput() throws ParseException{
Scanner s = new Scanner(System.in);
String input = s.next();
if(input.equals("a")) {
addToDoItem();
}
else if(input.equals("d")) {
//deleteToDoItem();
}
else if(input.equals("t")) {
// toggleComplete();
}
else if(input.equals("p")) {
printAll();
}
else if(input.equals("q")) {
System.exit(0);
}
}
public static ToDoItem addToDoItem() throws ParseException {
ToDoItem newItem;
newItem = null;
System.out.print("Enter an item to add to list: ");
String desc = k.nextLine();
if(desc.trim().length()==0) return newItem;
System.out.print("Enter Date (MM/dd/YYYY): ");
String dueDate = k.nextLine();
System.out.print("Enter priority between 1 and 3 (3 being the highest): ");
String prior = k.nextLine();
int p = Integer.parseInt(prior);
if(dueDate.trim().length()==0){
newItem = new ToDoItem(desc);
}
else {
newItem = new ToDoItem(desc, dueDate);
}
newItem.setPriority(p);
return newItem;
//toDoItems.add(new ToDoItem(desc, p, dueDate));
}
public static void printAll() throws ParseException {
ToDoItem item = new ToDoItem();
System.out.println(item);
//ToDoItem task = newItem.get(i);
// ***************
// You should not need to create ToDoItems here
// This method should loop through your array and print out each item
// Since you have a toString() method you can print the objects by passing
// them into like so inside of a loop System.out.println( item.get(i) )
//for(int i = 0; i < newItem.size(); i++) {
// System.out.println(toDoItems.get(i));
// }
// for(ToDoItem myItem : toDoItems) {
//ToDoItem myItem = toDoItems.get(i);
//System.out.println(myItem);
// System.out.println(myItem.getDescription()+" -"+myItem.getPriority()+"- ("+myItem.getDueDate()+")");
}
}
//public static void deleteToDoItem() {
// **********
// You won't need a loop here, you can directly
// delete the item at the given index.
// Prompt for an int, read in the int, then call item.remove(i);
//System.out.print("Enter index of item to delete: ");
//int delete = k.nextInt();
//toDoItems.remove(i);
// }
// public static void toggleComplete() {
/////
// }
//}
ToDoItem.java
import java.text.*;
import java.util.Date;
//import java.lang.NullPointerException;
public class ToDoItem {
private String description;
private Date dueDate;
private int priority;
DateFormat df = DateFormat.getDateInstance(DateFormat.SHORT);
public ToDoItem() {
}
public ToDoItem(String desc) {
description = desc;
dueDate = null;
priority = 0;
}
public ToDoItem(String desccription, String dDate) throws ParseException {
this.description = description;
dueDate = df.parse(dDate.trim());
}
public String toString() {
if(dueDate != null) {
return( description + " -"+priority+"- " + "Date not Set");
}
else {
return( description + " -"+priority+"- " + df.format(dueDate));
}
}
public void setPriority( int prio) {
if(prio<0) this.priority = 0;
else if(prio > 3) this.priority = 3;
else this.priority = prio;
}
public int getPriority() {
return this.priority;
}
public void setDueDate(String date) throws ParseException {
Date d = df.parse(date.trim());
this.dueDate = d;
}
public String getDescription() {
return description;
}
public String getDueDate() {
if(dueDate == null) return "";
return df.format(dueDate);
}
}
答案 0 :(得分:0)
如果您在解析和打印日期类型时遇到问题,这可能会对您有所帮助:
SimpleDateFormat sdf = new SimpleDateFormat("MM/dd/yyyy");
String dateString = sdf.format(new Date());
Date date = null;
try {
date = sdf.parse("10/16/2015");
} catch (ParseException objcPException) {
// TODO Auto-generated catch block
objcPException.printStackTrace();
}
System.out.println(date);
System.out.println(dateString);
您必须更改此方法:
public ToDoItem(String desccription, String dDate) throws ParseException {
this.description = description;
dueDate = df.parse(dDate.trim());
} 对此:
public ToDoItem(String desccription, String dDate) throws ParseException {
this.description = description;
dueDate = sdf.parse(dDate);
} 并在我的示例中将DateFormat切换为SimpleDateFormat。 也许你必须在解析之前首先验证输入的形式(MM / dd / yyyy)。
答案 1 :(得分:0)
替换以下代码
DateFormat df = DateFormat.getDateInstance(DateFormat.SHORT);
以下声明并尝试
SimpleDateFormat df = new SimpleDateFormat("MM/dd/YYYY");
因此,构造函数将使用此dateformat来解析输入。
dueDate = df.parse(dDate.trim());
当用户以格式(MM / dd / YYYY)显示日期并以字符串形式读取时,最好的方法是使用dateformat解析它。从(stackoverflow)检查以下类似示例。你可以运行它并检查。
String string = "January 2, 2010";
DateFormat format = new SimpleDateFormat("MMMM d, yyyy", Locale.ENGLISH);
Date date = format.parse(string);
System.out.println(date);
希望它有所帮助。