【问题标题】:Error in simple java code [duplicate]简单的java代码中的错误[重复]
【发布时间】:2017-07-15 04:00:15
【问题描述】:

我正在研究线性回归,我想实现它。我想在“data.txt”文本文件中获取有关线性回归数据的信息。我使用Scanner 类读取文件。我也想把它们放在类变量中。当我使用'for循环'将它们放入变量时,我遇到了错误。

这里是错误信息

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 0
    at linearregression.LinearRegression.initFile(LinearRegression.java:35)
35 line is `y[i]=scan.nextInt();`

代码是

    private final double LEARNING_RATE=0.0001;

    private int num_TrainingSet;
    private int num_Features;

    private int[][] x;
    private int[] y;
    private double[] theta;

    private Scanner scan;

    public LinearRegression()
    {
        x = new int[num_TrainingSet][num_Features];
        y = new int[num_TrainingSet];
        theta = new double[num_Features+1];
    }

    public void initFile() throws FileNotFoundException
    {
        File file = new File("src/linearregression/data.txt");
        scan = new Scanner(file);
        num_TrainingSet = scan.nextInt();
        num_Features = scan.nextInt();
        for(int i=0;i<num_TrainingSet;i++)
        {
            y[i]=scan.nextInt();
        }
    }

当我也将此代码 y[i]=scan.nextInt() 更改为 y[i]=0; ,也会遇到错误。

【问题讨论】:

  • 当一个应用要求你输入训练集的多条记录时,你是否插入了0?
  • 你的标题没用。请对其进行编辑以反映问题。

标签: java


【解决方案1】:

您的构造函数为 x 和 y 数组分配内存:

    x = new int[num_TrainingSet][num_Features];
    y = new int[num_TrainingSet];

但是此时,num_TrainingSetnum_Features 都是 0,因为您实际上还没有初始化这些变量。所以你在构造函数中分配的数组都是零长度的。

相反,在用户给出输入后,在 initFile 方法中分配数组。

    num_TrainingSet = scan.nextInt();
    num_Features = scan.nextInt();
    x = new int[num_TrainingSet][num_Features];
    y = new int[num_TrainingSet];

【讨论】:

  • 非常感谢我明白我的错误。修改后生效
猜你喜欢
  • 2017-06-07
  • 1970-01-01
  • 1970-01-01
  • 2014-11-05
  • 2018-11-22
  • 2014-08-16
  • 2011-09-21
  • 2012-12-31
  • 2013-01-13
相关资源
最近更新 更多