我很长时间没有接触过Java,现在我正在努力初始化Array这个对象。每次它给出NullPointerException。
package RoomExpenses;
import java.util.Scanner;
我已将所有主要变量放在PSVM之外
public class ExpenseManager
{
static int n=5;
static Person p[]=new Person[n];
static long average=0,total=0;
主要方法
public static void main(String[] args)
{
// p=new Person[n];
Scanner sc=new Scanner(System.in);
initialize();
System.out.println("Please enter details of all the "+n+" persons");
for(int i=0;i<n;i++)
{
//p[i]=new Person();
//It is not allowing me initialize here and giving error.
System.out.println("Details of Person No: "+(i+1));
System.out.println("Enter name: ");
p[i].Name=sc.nextLine();
System.out.println("Enter expense done by "+p[i].Name);
p[i].expense=sc.nextLong();
p[i].id=i+1;
p[i].balance=0;
}
计算平均费用
/* Calculate Average Expense */
for(int i=0;i<n;i++)
{
total+=p[i].expense;
}
average=total/n;
/* Calculate Average Expense */
计算每个人的平衡。积极意味着人应该从别人那里获得金钱。
否定意味着人应该向他人付钱
/* Calculate Balance*/
for(int i=0;i<n;i++)
{
p[i].balance=p[i].expense-average;
}
/* Calculate Balance*/
显示人员的详细信息。
System.out.println("Details of all the persons.");
System.out.println("Id\t\tName\t\tExpense\t\tBalance");
for(int i=0;i<n;i++)
{
System.out.println(p[i].id+"\t\t"+p[i].Name+"\t\t"+p[i].expense+"\t\t"+p[i].balance);
}
}
public static void initialize()
{
for(int i=0;i<n;i++)
{
p[i]=new Person();
}
}
class Person
{
String Name;
int id;
long expense,balance;
Person()
{
Name="";
id=0;
expense=0;
balance=0;
}
}
答案 0 :(得分:1)
你应该取消评论这一行:
for(int i=0;i<n;i++)
{
//p[i]=new Person(); // un-comment this line
System.out.println("Details of Person No: "+(i+1));
System.out.println("Enter name: ");
p[i].Name=sc.nextLine();
...
您必须在修改其成员之前创建Person
实例。
评论此行时,p[i]
为null
,因此p[i].Name
会引发NullPointerException
。
编辑:
我刚注意到您的Person
课程是ExpenseManager
课程的内部课程。将其声明更改为static class Person
,您将能够在没有封闭实例的情况下实例化它。
另一种方法是将其移到ExpenseManager
班级之外。