【问题标题】:multidimensional array object memory location多维数组对象内存位置
【发布时间】:2014-01-07 21:52:16
【问题描述】:

它被遵守并且在给出空指针异常之后也可以工作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 行使用向量或不使用向量为多维数组对象分配内存??

【问题讨论】:

  • 第 48 行是哪一个?当您创建引用数组时,默认情况下它们是null。如果您希望这些引用指向对象,您也需要创建它们。
  • 您说的是向量,但您可以使用另一种类型的集合。见learn-java-tutorial.com/Collections.cfm
  • 这是第 48 行 --->cpa shivalik[][][]=new cpa[classes][sec[i]][n[i][j]];//multi-维度对象

标签: java arrays memory multidimensional-array core


【解决方案1】:

通常,当您收到 NullPointerException 时,最简单的做法是查看获取异常的行并问自己为什么没有初始化?如果这对调试器中的代码没有帮助。

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

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

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

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

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

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

【讨论】:

    【解决方案2】:

    我已经运行了你的代码,似乎sec[] 没有初始化。 sec[i]=in.nextInt(); 时崩溃

    【讨论】:

    • 该行需要内存分配。无法弄清楚如何
    • 是的,您应该执行int secSize = in.nextInt(); sec = new int [secSize] 之类的操作。也许你应该重新考虑一下。或者 sec 可能是一个已知数组,所以它应该在别处初始化,或者你应该在这里初始化它。
    • 如果你想在 c++ 中做类似vector.pushback() 之类的事情,那么请使用ArrayList 或其他东西。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-10-22
    • 2016-02-27
    • 2013-06-27
    • 2015-12-30
    • 2016-12-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多