待办事项列表和排序

凯文

我正在做我的学校项目,我的想法之一是通过询问来创建待办事项清单

步骤1.输入事件步骤2.用户输入步骤3.输入到期日期(十进制格式)步骤4.用户输入步骤5。询问用户是否要输入更多事件(1表示是,0表示否)步骤6。当用户未输入0时,重复过程1-5,然后我希望我的代码根据到期日对事件进行排序。我在StackOverflow上找到了适用于我的程序的内容,但存在以下问题:

  1. 当我运行程序时,系统显示:注意:Main.java使用未经检查或不安全的操作。注意:使用-Xlint:unchecked重新编译以获取详细信息。我不知道为什么,希望这个问题能解决。
  2. 当我运行程序时,输入第一个事件后将跳过第2步,这意味着仅输入一个事件和到期日,然后您只能输入到期日。
  3. 我不知道这行代码是如何工作的Collections.sort(sortedList, Comparator.comparing(s -> arr_dues[stringListCopy.indexOf(s)]));,如果我提交此代码,我应该能够理解。如果可以的话,请您向我解释一下比较器,或者删除一个视频链接,我可以观看该视频以了解这个概念。

非常非常非常感谢。这是我的代码。

static void to_do() {
    int more = -1;
    String event;
    double due = 0.0;
    Scanner in = new Scanner(System.in);
    ArrayList<String> events = new ArrayList <String>();
    ArrayList<Double> dues = new ArrayList <Double>();
    System.out.println("To-Do List Generator:");
    while (more != 0) {
      System.out.println("Please enter your event");
      event = in.nextLine();
      events.add(event);
      System.out.println("Please enter the due date in decimal form");
      due = in.nextDouble();
      dues.add(due);
      System.out.println("Do you have more events to add? Yes enter 1, No enter 0");
      more = in.nextInt();
    }
    System.out.println("Entry Successful. Here is your to do list");
    String[] arr_events = new String[events.size()];
    double[] arr_dues = new double[dues.size()];
    for (int i=0; i<events.size();i++){
      arr_events[i] = events.get(i);
    }
    for (int i=0; i<dues.size();i++){
      arr_dues[i] = dues.get(i);
    }
    final List<String> stringListCopy = Arrays.asList(arr_events);
    ArrayList<String> sortedList = new ArrayList(stringListCopy);
    Collections.sort(sortedList, Comparator.comparing(s -> arr_dues[stringListCopy.indexOf(s)]));
    String[] returnarr = new String[stringListCopy.size()];
    Collections.sort(dues);
    for (int i = 0; i<stringListCopy.size(); i++) {
      returnarr[i] = sortedList.get(i);
    }
    for (int i = 0; i<arr_dues.length; i++) {
      System.out.print(returnarr[i] + ", Due: ");
      System.out.println(dues.get(i));
    }
  }
public static void main(String[] args) {
to_do();
}
短跑运动员
  1. 标准用法为:

    List<String> sortedList = new ArrayList<>(stringListCopy)

  2. 这里的问题可能是在处理换行符。当您调用in.nextInt()时,它从中读取一个整数,System.in但不读取最终的换行符,然后由读取in.nextLine()尝试打印您正在读取的值以查看其作用。

  3. 阅读有关排序和lambda的标准教程。总而言之,Collections.sort需要一个ComparatorComparator接口具有许多用于创建比较器的静态方法。Comparator.comparing创建一个比较器,该比较器比较生成的值FunctionFunction是一个功能性接口,因此可能需要一个lambda。您显示的语句可以解释为:sortedList使用表达式根据从每个条目生成的值的自然顺序对集合进行排序arr_dues[stringListCopy.indexOf(s)]

还要注意,更好的设计是将每个事件封装在一个对象中:

class Event {
    private final String name;
    private final LocalDate dueDate;
}

并有一个事件列表:

List<Event> toDoList = new ArrayList<>();

确实不需要在集合和数组之间进行复制。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章