2015-11-07 93 views
0

该程序应该允许用户输入每个月的退出值,然后输出退出和最干燥季节的平均值。它正在编译,但问题是我无法将数据输入到数组中。它让我进入第一个数组元素的值,然后告诉我有一个错误:java中整数数组的问题

Enter precipitation for each month: 
Month #01 = 10 
Exception in thread "main" java.lang.NullPointerException 
at Seasons.In(Seasons.java:16) 
at Seasons.main(Seasons.java:41) 
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
at java.lang.reflect.Method.invoke(Method.java:483) 
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:134) 

Process finished with exit code 1 

下面是代码:

import java.util.Scanner; 
import java.util.ArrayList; 

public class Seasons { 
private ArrayList<Integer> monthList; 
private int winter,spring,summer,autumn; 
public void In(){ 
    Scanner in = new Scanner(System.in); 
    System.out.println("Enter precipitation for each month: "); 
    for(int i=0;i<12;i++){ 
     System.out.print("Month #"+i+1+" = "); 
     int a=in.nextInt(); 
     monthList.add(i, a); 
    } 
} 
public int Calculate(){ 
    int Sum = 0; 
    for(int element:monthList){ 
     Sum+=element; 
    } 
    winter = monthList.get(11) + monthList.get(0) + monthList.get(1); 
    spring = monthList.get(2) + monthList.get(3) + monthList.get(4); 
    summer = monthList.get(5) + monthList.get(6)+ monthList.get(7); 
    autumn = monthList.get(8) + monthList.get(9) + monthList.get(10); 
    return Sum; 
} 
public void Out(int Result){ 
    System.out.println("Average precipitation for this year is "+ Result/12); 
    if(winter<spring && winter<summer && winter<autumn) System.out.println("Winter was the driest season - "+winter); 
    else if(spring<summer && spring<autumn) System.out.println("Spring was the driest season - "+spring); 
    else if(autumn<summer) System.out.println("Autumn was the driest season - "+autumn); 
    else System.out.println("Summer was the driest season - "+summer); 
} 
public static void main(String[] args){ 
    Seasons Precipitation = new Seasons(); 
    Precipitation.In(); 
    Precipitation.Out(Precipitation.Calculate()); 
} 
} 

应该心存感激的任何帮助。

UPD:感谢您注意到我的无心的错误,现在它的工作原理!

+0

哪一行是16行?它是'System.out.print(“Month#”+ i + 1 +“=”);'? – bpgeck

+2

除了你面临的问题,你的命名约定需要看[链接](http://www.oracle.com/technetwork/java/codeconventions-135099.html) –

+0

可能重复[什么是空指针异常,以及如何解决它?](http://stackoverflow.com/questions/218384/what-is-a-null-pointer-exception-and-how-do-i-fix-it) –

回答

2

随着

private ArrayList<Integer> monthList; 

目前列表为空(对象的默认值),当你做monthList.add();意味着null.add()给你Null Pointer .Change它

private ArrayList<Integer> monthList=new ArrayList<Integer>(); 
1

初始化的ArrayList:

ArrayList<Integer> monthList =new ArrayList<Integer>(); 
0

您的数组列表未初始化

private ArrayList<Integer> monthList; 

应改为

private ArrayList<Integer> monthList = new ArrayList<>(); 
0

在这里你去

你没有初始化的ArrayList。这就是全部

public static void main(String[] args) { 
    Seasons Precipitation = new Seasons(); 
    Precipitation.monthList = new ArrayList<Integer>();//INITIALISE 
    Precipitation.In(); 
    Precipitation.Out(Precipitation.Calculate()); 
} 

如果有效,请将其标记为已接受。

+0

确保它是 – Doc

+0

你说的是你之前已经有四个人说过。你的答案如何给已经存在的答案添加任何内容? –

+0

@ErwinBolwidt 有人提到过 ArrayList monthList = new ArrayList ; 这是不正确的 它应该是 ArrayList monthList = new ArrayList (); – Doc