gpt4 book ai didi

java - 我的生日排序运行程序有什么问题?

转载 作者:行者123 更新时间:2023-12-02 10:36:33 25 4
gpt4 key购买 nike

该程序的目标是根据出生日期对人员列表进行排序。

import static java.lang.System.*;

public class Person implements Comparable<Person>
{
private int myYear;
private int myMonth;
private int myDay;
private String myName;

public Person( int y, int m, int d, String n)
{
myYear=y;
myMonth=m;
myDay=d;

}

public int compareTo( Person other )
{
if(other.myYear>this.myYear)
return 1;
if(other.myYear<this.myYear)
return -1;
if(other.myMonth>this.myMonth)
return 1;
if(other.myMonth<this.myMonth)
return -1;
if(other.myDay>this.myDay)
return 1;
if(other.myDay<this.myDay)
return -1;
return(other.compareTo(this.myName));
}

@Override
public String toString() {
return "Person{" + "myYear=" + myYear + ", myMonth=" + myMonth + ", myDay=" + myDay + ", myName=" + myName + '}';
}


}
}

这是我遇到问题的运行者...它返回的只是[]。

import static java.lang.System.*;

import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Scanner;
import java.util.Collections;
import static java.lang.System.*;

public class PersonRunner
{
public static void main ( String[] args ) throws IOException
{

Scanner person=new Scanner("person.dat");
ArrayList list=new ArrayList();
ArrayList list2=new ArrayList();
person.nextLine();
while(person.hasNextLine()){
list.add(new Person(person.nextInt(),person.nextInt(),person.nextInt(),person.next()));
}
list2=list;
for(int i=0;i<list.size()-1;i++){
if(list.get(i).compareTo(list.get(i+1)))==1){
list2[i].set(list.get(i));
}
}
System.out.println(list2);
}
}

有一个主 .dat 文件从中读取,其中列出了测试用例/信息...

12
50 20 10 MARK
10 40 20 JACK
50 30 3 JAMES
3 50 2 JOANN
10 40 20 TOMMY
40 90 11 ANN
3 50 2 SALLY
3 50 5 FRED
11 11 11 DOUG
5 25 50 ED
10 10 1 ELTON
1 1 3 LINH

我们将不胜感激。我正在为一个类解决这个问题,所以我想要的只是基本的编码帮助,它不应该太高级......谢谢大家的回答。

最佳答案

好吧,所以你有一堆编译器和逻辑错误......

从...开始

if(list.get(i).compareTo(list.get(i+1)))==1){

是错误的,==1) 超出了 if (...) block 的上下文,您有两个右括号。

这也是错误的,因为 get 将返回一个没有 compareTo 方法的 Object

代码末尾似乎还有一个额外的 } 括号,这会将一切搞砸。

下一步...

public Person(int y, int m, int d, String n) {
myYear = y;
myMonth = m;
myDay = d;
}

您永远不会分配n o myName,这会导致潜在的NullPointerException

下一步...

Scanner reader = new Scanner("person.dat");

将创建一个Scanner,它将解析String person.dat并且不加载文件。

可能还有其他一些,但说实话,我扔了很多,把它扔掉。

下一步...

return (other.compareTo(this.myName));

是错误的,因为您试图将 Person 的实例与 String 进行比较,它应该是...

return (other.myName.compareTo(this.myName));

我们可以修复它吗?

让我们从扫描仪开始。您需要更具体地说明您希望扫描仪使用的数据源。在本例中,您想要读取 File...

的内容
Scanner reader = new Scanner(new File("person.dat"));

接下来,利用 Java 中的通用支持为 List 的内容提供更多上下文...

ArrayList<Person> list = new ArrayList<>();

这将使管理变得更容易,并且当您从 List 检索对象时无需强制转换该对象

就个人而言,我会读取文件的每一行,并使用第二个扫描仪来解析各个行。

while (reader.hasNextLine()) {
String text = reader.nextLine();
Scanner parser = new Scanner(text);
list.add(new Person(parser.nextInt(), parser.nextInt(), parser.nextInt(), parser.next()));
}

说实话,我不知道什么......

list2=list;
for(int i=0;i<list.size()-1;i++){
if(list.get(i).compareTo(list.get(i+1)))==1){
list2[i].set(list.get(i));
}

这是在做,并且由于有一种更简单的方法来执行它,我只是将其删除并替换为...

Collections.sort(list);
for (Person p : list) {
System.out.println(p);
}

以及更新的 Person 类...

public class Person implements Comparable<Person> {

private int myYear;
private int myMonth;
private int myDay;
private String myName;

public Person(int y, int m, int d, String n) {
myYear = y;
myMonth = m;
myDay = d;
myName = n;
}

public int compareTo(Person other) {
if (other.myYear > this.myYear) {
return 1;
}
if (other.myYear < this.myYear) {
return -1;
}
if (other.myMonth > this.myMonth) {
return 1;
}
if (other.myMonth < this.myMonth) {
return -1;
}
if (other.myDay > this.myDay) {
return 1;
}
if (other.myDay < this.myDay) {
return -1;
}
return (other.myName.compareTo(this.myName));
}

@Override
public String toString() {
return "Person{" + "myYear=" + myYear + ", myMonth=" + myMonth + ", myDay=" + myDay + ", myName=" + myName + '}';
}

}

关于java - 我的生日排序运行程序有什么问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53255420/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com