什么是产生错误?

时间:2017-03-21 13:25:44

标签: java

import java.util.Scanner;
public class Array {
    public static void main(String[] args)
    {
        Scanner sc=new Scanner(System.in);
        int i=0;
        String[] name = new String[i];
        int[] roll = new int[i];
        float[] total = new float[i];
        float[] per = new float[i];
        System.out.println("Enter the no of student/s \n");
        int no=sc.nextInt();
        for(i=1;i<=no;i++)
        {
            System.out.println("Enter the Name of Student.");
            name[i] = sc.nextLine();
            System.out.println("Enter the RollNo of Student.");
            roll[i]=sc.nextInt();
            System.out.println("Enter the Subject marks");
            int[] marks = new int[5];
            for(i=1;i<=5;i++)
            {
                marks[i]=sc.nextInt();
                total[i]+=marks[i];
            }
            per[i]=(total[i]/500)*100;
        }
        System.out.println("To get details press Y to cancel press N.");
        Scanner reader = new Scanner(System.in);
        char choice = reader.next().trim().charAt(0);

        switch(choice)
        {
        case 'Y':
            for(i=0;i<=no;i++)
            {
                System.out.println("Name: "+name[i]);
                System.out.println("Rollno: "+roll[i]);
                System.out.println("Total marks: "+total[i]);
                System.out.println("Percentage: "+per[i]);
                if(per[i]>=80)
                {
                    System.out.println(" Distinction!!!");
                }
                else if(per[i]>=60&&per[i]<=80)
                {
                    System.out.println("First Division");

                }
                else if(per[i]>=40&&per[i]<=60)
                {
                    System.out.println("Second Division");
                }
                else{
                    System.out.println("Fail");
                }
            }
        case 'N':
            System.out.println("Exit");

        }

    }
}

当学生名称的扫描行程序终止时。请问,产生错误的原因是什么。我是Java新手。

4 个答案:

答案 0 :(得分:0)

在了解学生人数后,您必须初始化数组大小。你在这里创建一个大小为0的数组:

int i=0;
String[] name = new String[i];

答案 1 :(得分:0)

例外是AraryIndexOutOfBound,您尚未分配字符串数组。 你的代码应该是这样的东西,彻底重做,有很多错误

  int no=sc.nextInt();
        String[] name = new String[no];
        for(i=0;i<no;i++)
        {
            System.out.println("Enter the Name of Student.");
            name[i] = sc.nextLine();
            System.out.println("Enter the RollNo of Student.");
            roll[i]=Integer.parseInt(sc.nextLine());
            System.out.println("Enter the Subject marks");

        }

答案 2 :(得分:0)

创建数组后,您无法更改数组的大小!

正如上面的@inwi所建议的

小心你在这里创建大小为零的数组!

int i = 0;
String[] name = new String[i];
int[] roll = new int[i];
float[] total = new float[i];
float[] per = new float[i];

这是代码中的问题。在接受一些学生作为输入之后创建数组

// ....
System.out.println("Enter the no of student/s \n");
int no=sc.nextInt();
String[] name = new String[no];
int[] roll = new int[no];
float[] total = new float[no];
float[] per = new float[no];

还要注意访问数组元素的方式,数组是基于Java的0 所以从i = 0开始你的迭代;在所有代码中查看此内容

for(i=1;i<=no;i++) { 
快乐的编码!! 祝你好运

答案 3 :(得分:0)

问题是你的rollname数组从下面的代码行初始化为0,你试图在for循环中的索引1处访问它们的元素,所以你必须得到ArrayIndexOutOfBound例外

int i=0;
        String[] name = new String[i];
        int[] roll = new int[i];

然后您从索引1

开始访问以下代码
System.out.println("Enter the RollNo of Student.");
            roll[i]=sc.nextInt();

您需要根据学生人数重新初始化您的卷阵列,如下所示

roll = new int[no];
name = new String[no];

在使用数组时,您需要更改for循环,如下所示

for(i=0;i<no;i++)