gpt4 book ai didi

java - "How to pass GregorianCalendar class object to a different class method ?"

转载 作者:行者123 更新时间:2023-12-01 19:35:38 27 4
gpt4 key购买 nike

  1. 我想使用一种能够创建学生记录的方法从用户那里获取有关学生详细信息的输入。我的类(class)学生应该包括以下领域:短期学期, 全名, 注册号等 .学生的注册号 = 年份和学号的串联。 例如,学生加入的年份 = 2023, 学生号= 80, 所以注册号=2380

另外,我的任务是使用 GregorianCalendar 类输入日期

学生类(class)内部:

import java.util.*;

class Student2{

String fullname;
GregorianCalendar date;
short semester;

Student2()
{

}

Student2(String name,short sem, GregorianCalendar Date)
{
fullname = name;
semester=sem;
date = Date;
}

int years = date.get(Calendar.YEAR);

String year = Integer.toString(years);
String Studno = Integer.toString(80);

String y1= year.substring(0,3);
String Reg = y1.concat(Studno);

int reg = Integer.parseInt(Reg);

void Studarry()
{
int n=5,i;
Student2[] stuarry = new Student2[10];
for(i=0;i<n;i++)
{
System.out.println("Enter name sem year month day gpa cgpa\n");
Scanner sc = new Scanner(System.in);
String name = sc.nextLine();

short sem2 = sc.nextShort();
int year2 = sc.nextInt();
int month2 = sc.nextInt();
int day2=sc.nextInt()

GregorianCalendar gc2 = new GregorianCalendar(year2,month2,day2);


stuarry[i] = new Student2(name,sem2,gc2);

}
}

void Display()
{

}

}

内部驱动程序类别:

public class Greg2{

public static void main(String[] args)
{
Student2 starr = new Student2();
starr.Studarry();
}

}

错误:

  • 线程“main”中出现异常 java.lang.NullPointerException

    at oop2/lab5.Student2.<init>(Greg2.java:23)


    at oop2/lab5.Greg2.main(Greg2.java:68)

最佳答案

类名与变量名

date = Date;

带有大写 D

Date 是类的名称,而不是变量的名称。相反,您应该将传递的参数名称定义为 date 而不是 Date。此行变为 date = date ;。编译器可以区分参数和成员变量。如果您想让读者更清楚,您可以说 this.date = date ;

但这对于变量来说是一个糟糕的名称。因为确实有两个与 Java 捆绑在一起的名为 Date 的类,它们都与 GregorianCalendar 相关,所以我建议避免使用 date 作为变量名GregorianCalendar 对象 – 太困惑了。

java.time

GregorianCalendar 是一个糟糕的类。它在几年前就被 java.time 类完全取代了。具体来说,ZonedDateTime 。这两个类都代表通过某个特定区域(时区)的挂钟时间看到的时刻。

但是,这两个类都适合您的目的。您只需要一个日期,没有时间,也没有时区上下文或相对于 UTC 的偏移量。因此 LocalDate 适合您的需求。

LocalDate ld = LocalDate.of( year , month , day ) ;

构造函数

int years = date.get(Calendar.YEAR);

String year = Integer.toString(years);
String Studno = Integer.toString(80);

这些行是 float 的,而不是放置在方法内部。它们应该被放在你的方法的构造函数中。

为什么有一个名为Greg2的类?您指的是特定的学生吗?如果是这样,Greg 应该由分配给 Student 类的实例的值来表示。

名称末尾的所有 2 字符是怎么回事?命名很重要;弄清楚这一点,你就已经成功一半了。

所以大部分代码都是一团糟。 从头开始重试。查找其他代码示例,例如 Stack Overflow 上的 Oracle Tutorial 中的代码示例。 ,或在您类(class)的课本中的家庭作业中。

了解关注点分离。一个类(class)应该只代表一名学生。另一个类应该代表您的应用程序,并保存 main 方法。使用 Collection 将新实例化的 Student 类收集到名册中,如果您还有其他与名册相关的职责,则可能会创建一个类 Roster

最后,迈出一小步。一次添加一件小事,看看它是否正常运行。使用 System.out.println 验证值。不要尝试一次编写所有代码。

关于java - "How to pass GregorianCalendar class object to a different class method ?",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57734706/

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