无法将元素扫描到数组中

时间:2018-07-30 16:32:40

标签: java arrays string

我是Java的初学者。我写了几行代码,它显示了错误:

  

线程“ main”中的异常java.lang.ArrayIndexOutOfBoundsException:0

public string url;
IEnumerator Start()
{
    url = Application.dataPath + "/StreamingAssets/shareImage.png";
    using (WWW www = new WWW(url))
    {
        yield return www;
        Renderer renderer = GetComponent<Renderer>();
        renderer.material.mainTexture = www.texture;
    }
}

3 个答案:

答案 0 :(得分:0)

在创建Issue类的对象时,n的值为0,因此创建了大小为0的ID和Name数组。现在,在从用户那里获取输入之后,只需设置n表示用户输入,但ID []和Name []数组的大小仍然为0。因此,在get方法内部,您将访问大小为0的数组中的开箱即用的索引。

这是更正的代码:

import java.util.Scanner;
public class Issue {
    public static Scanner scan = new Scanner(System.in);
    int n;
    int ID[];
    String [] Name;
    public void get()
    {
        for (int i = 0; i < n; i++) {
            System.out.println("Enter " + (i+1) + "st Employe ID :");
            ID[i] = scan.nextInt();
            System.out.println("Enter Employe Name:");
            Name[i]=scan.nextLine();
        }
    }
    public static void main(String[] args) {
        Issue obj=new Issue();
        System.out.println("Enter no.of Employes:");
        obj.n=scan.nextInt();
        obj.Name =new String[n];
        obj.ID = new int[n];
        obj.get();

    }
}

在上面的代码中,我仅对ArrayIndexOutOfBound进行了更正。但是,可以通过遵循以下良好的编程习惯来改进您的代码:

  1. 遵循方法和变量的命名约定。
  2. 将类的非最终成员对象设为私有,并使用getter和setter。
  3. 遵循关注规则的分离。
  4. 使用BufferedReader而不是Scanner以获得更快的性能。

答案 1 :(得分:0)

这有点棘手,因为尽管您将obj.n=scan.nextInt();的数字设置为n,但是数组的大小仍然为0,因为它已使用dafult n值进行了初始化0。

该行:

obj.n=scan.nextInt();

不保证为数组IDName重新分配内存。我建议您避免使用公共变量,并使用构造函数进行总数封装。

public static final Scanner scan = new Scanner(System.in);

private final int n;
private final int ID[];
private final String[] Name;

public Main(int number) {
    this.n = number;
    this.ID = new int[n];
    this.Name = new String[n];
}

public void get() {

    for (int i = 0; i < n; i++) {
        System.out.println("Enter " + (i+1) + "st Employe ID :");
        ID[i] = scan.nextInt();
        scan.nextLine();
        System.out.println("Enter Employe Name:");
        Name[i] = scan.nextLine();

    }
}

public static void main(String[] args) {
    System.out.println("Enter no.of Employes:");
    Main obj = new Main(scan.nextInt());
    obj.get();
}

此外,您必须调用scan.nextLine();来消耗行本身,因为Scanner::nextInt不会像Scanner::nextLine那样终止行。

答案 2 :(得分:0)

  

线程“ main”中的异常java.lang.ArrayIndexOutOfBoundsException:0

     

在您尝试以大于索引大小的索引获取元素时发生   数组。

例如,

您有一个大小为10的数组 A ,并且您正在访问 A [10] ,那么您将获得异常,因为

  • 数组大小为10,因此有效索引为0-9以访问数组元素
  • A [10]表示访问的第(10 + 1)个元素大于数组大小(10)

对于您来说,当变量 n 的值为0时,您已经初始化了数组 ID Name 。要解决此错误,您应该在初始化变量n后初始化这些数组