我知道数组从索引零开始,当我调用数组时,我需要牢记这一点。

例如:

public int name [] = name [3]
for (int i = 0 ; i < 3 ; i++){
    name [i] = 0 ;
}

当我为模型编写代码时,我将以相同的方式进行操作。 但是,我反复收到错误java.lang.ArrayIndexOutOfBoundsException

这是我的代码:

public int T = 10;
public int A = 100;
public int t = 0;
public int a = 0
public double d  = 2.5;
public double weight = 0;
public double vision; // I initialize this later and it goes smoothly.
public double mem_payoff_time_action[][] = new double [T][A]; 
public double reward_problem[][] = new double [T][A];
public int action_taken[][] = new int [T][A];
public double action_mean []= new double [A]; 


public double getaction_mean() { 
    for ( int p = 0; p < action_mean.length ;p++){
        action_mean[p] = (p + 1);   
    }
    return action_mean[a];
}

public double calculate_mem_payoff_matrix_initialize (){
    for ( int t: Time ){
        for (a = 0 ; a == (action_mean.length - 1) ; a++){
            mem_payoff_time_action[t][a] = 0;
        }
    }
    return mem_payoff_time_action[t][a];
}

public double attach_this_weight(){
    for (a = 0 ; a < A ;a++){
        if (action_taken[t][a] == 1){
            if (vision == 1){
                if (mem_payoff_time_action[t][a] > 0.0 ){
                    weight = 0.1 ;
                }
                else{
                    weight = - (0.1); 
                }
            } 
            if (vision == 2){
                if (mem_payoff_time_action[t][a] > 0.0 ){
                    weight = 0.2 ;
                }
                else{
                    weight   = - (0.2); 
                }
            }
            if (vision == 3){
                if (mem_payoff_time_action[t][a] > 0.0 ){
                    weight = 0.3 ;
                }
                else{
                    weight   = - (0.3); 
                }
            }
        }
    }
    return weight;
}

public double calculate_reward_cummulative(){
    int p= 0;
    if (t ==0){
        for ( a= 0 ; a < action_mean.length ; a++){
            if (a == first_action_index){
                if (mem_payoff_time_action[0][a] < 0){
                    reward_problem[0][a] = d + (weight* mem_payoff_time_action[0][a]); 
                    else{
                        reward_problem[0][a] = d + (weight* mem_payoff_time_action[0][a]);
                    }
                }
                else{
                    reward_problem[0][p] = d;
                }
            }
        }
        else{
            for( p =0; p < action_mean.length  ;p++){
                if(action_taken[t][p]== 1){
                    if(mem_payoff_time_action[t][p] < 0){
                        reward_problem[t][p] = (reward_problem[t-1][p]) + (weight* mem_payoff_time_action[t][p]) ; 
                    }
                    else{
                        reward_problem[t][p] = (reward_problem[t-1][p]) + (weight* mem_payoff_time_action[t][p]) ;
                    }
                }
                else{
                    reward_problem[t][p] = reward_problem[t-1][p]; 
                }
            }
        }
        return reward_problem[t][a];
    }

我在方法calculate_reward_cummulative获得了reward_problem[][]数组的错误java.lang.ArrayIndexOutOfBoundsException

而且,我的大多数代码都会收到此错误。

我收到了mem_payoff_time_action[][]相同的错误。 我在写:

for (t = 0; t< T; t++){
    for (a = 0; a < A ; a++){
        mem_payoff_time_action[t][a] = 0;
    }
}

为了解决错误,我用action_mean.length更改了'A'。 并且,我创建了一个名为Time的数组。

public int Time [] = new int [T];
public int calcualte_time (){
    for (int t : Time){
        Time [t] = 0;
    }
    return Time [t];
}

而且,我重写了下面提到的代码。 而且,一切都很好。 但是,我仍然不明白为什么会出现此错误。

#1楼 票数:0

正如您正确指出的那样,您遇到的错误是在calculate_reward_cummulative方法中,原因如下:

返回reward_problem [t] [a];

该数组在逻辑上将具有10行(索引0-9)和100列(索引0-99)。 如果尝试获取第100个索引的值,则势必会遇到此异常。

在这里,t表示为0,而a作为全局变量,您将其用作for循环中的计数器,

对于(a = 0; a <action_mean.length; a ++)

当循环结束时,计数器的值(即“ a”)为100,因此您试图返回reward_problem [0] [100],因此jvm抛出异常。

请尝试使用其他计数器变量并返回适当的数组索引。

  ask by user3469181 translate from so

未解决问题?本站智能推荐:

4回复

2D数组索引超出范围异常

我是2D数组的新手,虽然我认为我理解它,但是我不确定为什么要使这个索引超出界限异常。 我尝试将地图尺寸设置为70x100,但仍然收到相同的错误。 似乎认为我正在搜索索引-1156638823,但我不明白为什么。 任何帮助,将不胜感激! LOGCAT
2回复

多维数组到缩进列表

我的任务是编写一个递归打印示例数组内容的方法。 我设法做到了,并在技术上完成了它。 但我想知道是否可以将代码打印得更“漂亮”?public class multirecursion { static String[][][] example = { { {"
3回复

二维联系人数组(Java)

我正在尝试制作一个基本程序,该程序允许使用它来输入和删除最多10个联系人([10] [4]数组,应该用名字,姓氏,电话号码和年龄填充)。 但是,当我尝试输入第五次月食时,会显示一条错误消息。 我想知道为什么会收到错误消息。 (我认为这与列有关,因为每当我输入> 4时,但我不确定确切是
1回复

找不到二维数组中的项目

我正在尝试制作一个程序,用户在其中输入邮政编码的第一部分,即3个或4个字符(我知道可以是2个字符,但我可以在以后加上),并且该程序将通过一个2D数组并输出与之相关的所有值。 我认为我的逻辑是在二维数组中获取邮政编码的子字符串(该数组是由在前面的代码部分中读取到的CSV文档形成的)。 我在控制
2回复

寻找一种更新多维数组的有效方法

我更新了多维数组的值(Y [i] [t] [k])。 由于更新需要在多次迭代中完成,因此这部分代码的运行时非常重要。 我想知道是否有人知道如何以更有效的方式做到这一点。 以下是需要更新的部分。 注意:
1回复

如何将字符串拆分为多维数组-Java

我认为已经有一个类似问题的答案,但是我找到了自己的解决方法: 而且效果很好。 但是我正在努力使用3维数组。 到目前为止,我的代码: 我Exception in thread "main" java.lang.NullPointerException得到Exception in th
1回复

如何在不定义元素的情况下填充2D字符数组?

我希望为“机器人竞技场”制作一个二维char数组,并给出其大小。 我有两个函数,getY和getX返回(整数)竞技场的x和y最大坐标,即30乘10,我想使水平墙为“-”,垂直墙为“ |” 和对角墙位于4个边缘的“ /”代表右下角和左上角,“ \\”代表左下角和右上角。 所有其他元素可以是
1回复

如何让孩子在带有二维数组的捉迷藏游戏中“咯咯笑”?[关闭]

关闭。 这个问题需要细节或清晰。 它目前不接受答案。 想改善这个问题吗? 通过编辑此帖子添加详细信息并澄清