dr.java 中的空指针异常
null pointer exception in dr.java
我正在尝试制作一个程序,让我输入一定天数和起始温度。在几天的时间里,温度以某种方式变化。然后打印最后一天的温度。我的教授说要使用 class TempPattern、字段 num_days 和 first_day_temp 以及构造函数和 finalTemp 方法。这是我拥有的:
public class TempPattern{
int num_of_days = 0;
int temp_first_day = 0;
public void TempPattern(int temp, int days){
days = num_of_days;
temp = temp_first_day;
}
public int num_of_days(int days){
return days;
}
public int temp_first_day(int temp){
return temp;
}
}
public void finalDayTemp(int days, int temp){
int half = days / 2;
int newtemp = temp + 2;
for (int current_day = 1; current_day <= half; current_day++){
newtemp = newtemp - 2;
}
for (int current_day = half + 1; current_day <= days; current_day++){
newtemp++;
}
System.out.println("Temperature on final day would be " + newtemp);
}
public void main(String[] args){
Scanner keyboard = new Scanner(System.in);
int days;
int temp;
System.out.print("number of days: ");
days = keyboard.nextInt();
System.out.print("temperature of first day: ");
temp = keyboard.nextInt();
finalDayTemp(days,temp);
}
编译成功,但出现错误。
java.lang.NullPointerException
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at edu.rice.cs.drjava.model.compiler.JavacCompiler.runCommand(JavacCompiler.java:267)
我认为有些东西是空值,但我真的不知道如何解决这个问题。我也不认为我正确地完成了整个构造函数和字段,所以请随意提供任何 help/advice,我将不胜感激。我会清除任何没有意义的东西。提前TY.
这里有一些错误,需要更改:
- Main 方法应该而且必须是静态的。
- findFinalDay() 方法应该是静态的,以便从 main() 方法调用它。
- TemperaturePattern class 不应为 public ,因为它旨在用作内部 class(根据我的理解)。
找到下面修改后的代码:
import java.util.Scanner;
public class HWfive{
public static void findFinalDayTemperature(int days, int temp){
int half = days / 2;
int newtemp = temp + 2;
for (int current_day = 1; current_day <= half; current_day++){
newtemp = newtemp - 2;
}
for (int current_day = half + 1; current_day <= days; current_day++){
newtemp++;
}
System.out.println("Temperature on final day would be " + newtemp);
}
public static void main(String[] args){
Scanner keyboard = new Scanner(System.in);
int days;
int temp;
System.out.print("number of days: ");
days = keyboard.nextInt();
System.out.print("temperature of first day: ");
temp = keyboard.nextInt();
findFinalDayTemperature(days,temp);
}
class TemperaturePattern{
int num_of_days = 0;
int temp_first_day = 0;
public void TemperaturePattern(int temp, int days){
days = num_of_days;
temp = temp_first_day;
}
public int num_of_days(int days){
return days;
}
public int temp_first_day(int temp){
return temp;
}
}
}
静态方法的解释:在加载class时创建static
方法或变量。未声明为 static
的方法或变量仅在 class 实例化为对象时创建,例如使用 new 运算符。
此外,Java 虚拟机不会创建 class 的实例,而只是在编译时加载并在 main()
方法处开始执行,main()
方法必须使用 static
修饰符声明,以便一旦加载 class,main()
方法就可用。
那些在main()
方法之外且没有static
修饰符的class变量和方法不能使用,直到class的一个实例=] 已在 main()
方法中创建为对象,因此在您的情况下,方法 'findFinalDayTemperature()' 必须是静态的才能由 'main()' 方法调用它。
我正在尝试制作一个程序,让我输入一定天数和起始温度。在几天的时间里,温度以某种方式变化。然后打印最后一天的温度。我的教授说要使用 class TempPattern、字段 num_days 和 first_day_temp 以及构造函数和 finalTemp 方法。这是我拥有的:
public class TempPattern{
int num_of_days = 0;
int temp_first_day = 0;
public void TempPattern(int temp, int days){
days = num_of_days;
temp = temp_first_day;
}
public int num_of_days(int days){
return days;
}
public int temp_first_day(int temp){
return temp;
}
}
public void finalDayTemp(int days, int temp){
int half = days / 2;
int newtemp = temp + 2;
for (int current_day = 1; current_day <= half; current_day++){
newtemp = newtemp - 2;
}
for (int current_day = half + 1; current_day <= days; current_day++){
newtemp++;
}
System.out.println("Temperature on final day would be " + newtemp);
}
public void main(String[] args){
Scanner keyboard = new Scanner(System.in);
int days;
int temp;
System.out.print("number of days: ");
days = keyboard.nextInt();
System.out.print("temperature of first day: ");
temp = keyboard.nextInt();
finalDayTemp(days,temp);
}
编译成功,但出现错误。
java.lang.NullPointerException
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at edu.rice.cs.drjava.model.compiler.JavacCompiler.runCommand(JavacCompiler.java:267)
我认为有些东西是空值,但我真的不知道如何解决这个问题。我也不认为我正确地完成了整个构造函数和字段,所以请随意提供任何 help/advice,我将不胜感激。我会清除任何没有意义的东西。提前TY.
这里有一些错误,需要更改:
- Main 方法应该而且必须是静态的。
- findFinalDay() 方法应该是静态的,以便从 main() 方法调用它。
- TemperaturePattern class 不应为 public ,因为它旨在用作内部 class(根据我的理解)。
找到下面修改后的代码:
import java.util.Scanner;
public class HWfive{
public static void findFinalDayTemperature(int days, int temp){
int half = days / 2;
int newtemp = temp + 2;
for (int current_day = 1; current_day <= half; current_day++){
newtemp = newtemp - 2;
}
for (int current_day = half + 1; current_day <= days; current_day++){
newtemp++;
}
System.out.println("Temperature on final day would be " + newtemp);
}
public static void main(String[] args){
Scanner keyboard = new Scanner(System.in);
int days;
int temp;
System.out.print("number of days: ");
days = keyboard.nextInt();
System.out.print("temperature of first day: ");
temp = keyboard.nextInt();
findFinalDayTemperature(days,temp);
}
class TemperaturePattern{
int num_of_days = 0;
int temp_first_day = 0;
public void TemperaturePattern(int temp, int days){
days = num_of_days;
temp = temp_first_day;
}
public int num_of_days(int days){
return days;
}
public int temp_first_day(int temp){
return temp;
}
}
}
静态方法的解释:在加载class时创建static
方法或变量。未声明为 static
的方法或变量仅在 class 实例化为对象时创建,例如使用 new 运算符。
此外,Java 虚拟机不会创建 class 的实例,而只是在编译时加载并在 main()
方法处开始执行,main()
方法必须使用 static
修饰符声明,以便一旦加载 class,main()
方法就可用。
那些在main()
方法之外且没有static
修饰符的class变量和方法不能使用,直到class的一个实例=] 已在 main()
方法中创建为对象,因此在您的情况下,方法 'findFinalDayTemperature()' 必须是静态的才能由 'main()' 方法调用它。