2 回答
TA贡献2051条经验 获得超10个赞
您当前的代码有两个问题:
1)变量没有被初始化。为此,您可以Sales在方法中创建对象(从andmain中删除静态关键字)。calCityTotalcalMonthlyTotal
2)一旦上述问题得到解决,你会遇到Arrayindexoutofboundsexception因为citySum有长度sales.length而你的循环calCityTotal进入sales[0].length。
将变量声明为static并在constructor. 静态变量应该独立于任何实例。通读Java:什么时候使用静态方法才知道什么时候声明静态变量。如果要将变量声明为static,则应在static块中初始化它们(Java 中的静态块)。
下面的代码将起作用:
public class Sales {
private String[] months;
private String[] cities;
private int[] citySum;
private int[] monthlySum;
private int[][] sales;
private int col;
private int row;
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
Sales salesObj = new Sales();
salesObj.calCityTotal();
salesObj.calMonthlyTotal();
}
public Sales() {
months = new String[]{"January", "Febuary", "March", "April",
"May", "June"};
cities = new String[]{"Chilliwack", "Kamloops", "Kelowna",
"NanaimoSurrey", "Vancouver", "Victoria"};
sales = new int[][]{{400, 500, 500, 600, 500, 600},
{600, 800, 800, 800, 900, 900},
{700, 700, 700, 900, 900, 1000},
{500, 600, 700, 800, 700, 700},
{900, 900, 900, 1000, 1100, 1100}};
citySum = new int[sales.length+1];
monthlySum = new int[sales[0].length];
}
public void calCityTotal() {
for (row = 0; row < sales.length; row++) {
for (col = 0; col < sales[0].length; col++) {
citySum[col] += sales[row][col];
}
}
}
public void calMonthlyTotal() {
for (row = 0; row < sales.length; row++) {
for (col = 0; col < sales[0].length; col++) {
monthlySum[row] += sales[row][col];
}
}
}
}
TA贡献1875条经验 获得超3个赞
你得到了NullPointerException因为sales在nullline for (row = 0; row < sales.length; row++)。
即使您sales在构造函数中为变量设置了一个值Sales(),您也永远不会调用该构造函数(如new Sales())。
因此,要解决此问题,NullPointerException您可以在方法中调用Sales构造函数,main()如下所示:
public static void main(String[] args)
{
new Sales();
calCityTotal();
calMonthlyTotal();
displayTable();
}
编辑
修复后NullPointerException,您的代码仍然有一些其他问题。
在里面calCityTotal(),我认为sales[0].length应该更正。sales[row].length
citySum数组初始化为sales. 这意味着citySum.length等于“行”的数量。但是你写citySum[col]了这会导致ArrayIndexOutOfBoundsException因为“列”的数量可以超过citySum.length. (这实际上发生在您的程序中。因为行数 = 5,列数 = 6。)
添加回答
举报