多维数组对象内存位置

问题描述 投票:0回答:2

它得到编译,并且在给出空指针异常之后也可以工作 2 个步骤。 Q;-> 如何在第 48 行使用向量或不使用向量为多维数组对象分配内存??

 import java.util.Scanner;

class cpa
{
Scanner in=new Scanner(System.in);
int classes,sec[],n[][];
String name[][][];
float sub1[][][],sub2[][][],per[][][],sectionavg[][],clasavg[],schoolavg;
void start()
{
    int choice;
    System.out.println("Press [1] for creating record\tPress [2] for viewing        result\n\t\tPress [3] to exit");
    choice=in.nextInt();
    if(choice==1)
    {
        create();
    }
    else if(choice==2)
    {
        view();
    }
    else if(choice==3)
    {
        System.out.println("HAVE A NICE TIME...");
    }
    else
    {
        System.out.println("INVALID INPUT");
        start();
    }
}
void create()
{

    System.out.println("Enter total classes :  ");
    classes=in.nextInt();
    clasavg=new float[classes];
    for(int i=1;i<=classes;i++)
    {
        clasavg[i]=0;
        System.out.println("HOW MANY SECTIONS FOR "+i+" CLASS");
        sec[i]=in.nextInt();
        for(int j=1;j<=sec[i];j++)
        {
            sectionavg[i][j]=0;
            System.out.println("ENTER NO OF  STUDENT FOR SECTION "+j+" :");
            n[i][j]=in.nextInt();
            cpa shivalik[][][]=new cpa[classes][sec[i]][n[i][j]];//multi-dimensional OBJECT
            for(int k=1;k<=n[i][j];k++)
            {
                shivalik[i][j][k]= new cpa();
                shivalik[i][j][k].getinfo(i,j,k);
                sectionavg[i][j]+=shivalik[i][j][k].per(i,j,k);
            }
            clasavg[i]+=sectionavg[i][j];
        }
        schoolavg+=clasavg[i];
    }
    start();
}
float sectionavg(int i,int j){return sectionavg[i][j]/n[i][j];}
float clasavg(int i){return clasavg[i]/sec[i];}
float schoolavg(){return schoolavg/classes;}
void view()
{
    int choice,clasnum,secnum,roll;
    System.out.println("[1]-> SCHOOL PERFORMANCE\t[2]-> CLASS PERFORMANCE\n[3]SECTION  PERFORMANCE\t[4]STUDENT PERFORMANCE\n\t\t[5]EXIT");
    choice=in.nextInt();
    switch(choice)
    {
        case 1:System.out.println("YOUR SCHOOL PERFORMANCE ACCORDING TO RECORDS IS  "+schoolavg()+" %");view();
        case 2:System.out.println("ENTER THE CLASS NUMBER WHOSE PERFORMANCE YOU WANT TO  VIEW :");
        clasnum=in.nextInt();
        System.out.println(clasnum+"CLASS PERFORMANCE ACCORDING TO RECORDS IS "+clasavg(clasnum)+" %");view();
        case 3:System.out.println("ENTER THE CLASS NUMBER :");
        clasnum=in.nextInt();
        System.out.println("ENTER THE SECTION NUMBER OF THE CLASS :");
        secnum=in.nextInt();
        System.out.println(clasnum+"CLASS "+secnum+" SECTION PERFORMANCE ACCORDING TO RECORDS IS "+sectionavg(clasnum,secnum)+" %");view();
        case 4:System.out.println("ENTER THE CLASS NUMBER OF STUDENT:");
        clasnum=in.nextInt();
        System.out.println("ENTER THE SECTION NUMBER OF THE STUDENT :");
        secnum=in.nextInt();
        System.out.println("ENTER THE ROLL NUMBER OF THE STUDENT");
        roll=in.nextInt();
        System.out.println(name[clasnum][secnum][roll]+" SCORED "+per(clasnum,secnum,roll)+" PERCENTAGE");view();
        case 5:System.out.println("HAVE A NICE TIME...");break;
        default:System.out.println("INVALID INPUT");view();
    }
}
void getinfo(int i,int j,int k)
{
    System.out.println("Enter Name : ->");
    name[i][j][k]=in.next();
    System.out.println("Enter marks in sub1 : ->");
    sub1[i][j][k]=in.nextFloat();
    System.out.println("Enter marks in sub2 : ->");
    sub2[i][j][k]=in.nextFloat();
    per[i][j][k]=(sub1[i][j][k]+sub2[i][j][k])/2;
}
float per(int i,int j,int k){return per[i][j][k];}
public static void main(String[] args)
{
    cpa shivalik=new cpa();
    shivalik.start();
}   
   }

它得到了编译,并且在给出空指针异常之后也可以工作 2 个步骤。

所以我的问题是:如何使用向量或不使用向量为第 48 行的多维数组对象分配内存??

java arrays memory multidimensional-array
2个回答
1
投票

通常,当您收到 NullPointerException 时,最简单的事情就是查看收到异常的行并问自己为什么没有初始化?如果这无助于在调试器中单步执行代码。

我不知道哪一行是48,但这行显然是错误的。

n[i][j]=in.nextInt();

您使用

n
作为数组的数组,但我找不到将其初始化为任何内容的代码。

顺便说一句,数组的索引从 0 开始,而不是 1,所以循环应该看起来像这样

for (int i = 0; i < classes; i++)

鉴于

n
似乎是一个临时变量,您似乎不需要将其存储在任何地方,我会将其从您的代码中删除。


0
投票

我已经运行了你的代码,似乎

sec[]
未初始化。当
sec[i]=in.nextInt();

时它会崩溃
© www.soinside.com 2019 - 2024. All rights reserved.