好的,所以我正在編寫這個程序,其中一部分數組被設置爲數組另一部分的值。相關的代碼是(它是由一路行50):陣列空間足夠時出現邊界錯誤Java Array Index
variables[(program[1])+2]=inputs[0];
這裏是其中數組得到初始化:
int[] variables;
variables=new int[10000];
程序數組:
int[] program;
program=new int[10000];
而輸入陣列:
int[] inputs;
inputs=new int[9];
當我運行它,它會產生錯誤:
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 5
at Central.main(Central.java:50)
任何想法?提前致謝。
OK,這裏是整個代碼:
import java.util.Random;
進口java.util.Scanner的;
公共類中央{
public static void main(String[] args) {
int[] inputs;
inputs=new int[9];
int[] outputs;
outputs=new int [9];
int[]results;
results=new int [10000];
int[] program;
program=new int[10000];
int[][] random;
random=new int[100][100];
int[] bestProgram;
bestProgram=new int[10000];
int[] bestVariables;
bestVariables=new int [10000];
int[] variables;
variables=new int[10000];
int[][] bestRandom;
bestRandom=new int [100][100];
Scanner sc = new Scanner(System.in);
inputs[0]=sc.nextInt();
inputs[1]=sc.nextInt();
inputs[2]=sc.nextInt();
inputs[3]=sc.nextInt();
inputs[4]=sc.nextInt();
inputs[5]=sc.nextInt();
inputs[6]=sc.nextInt();
inputs[7]=sc.nextInt();
outputs[0]=sc.nextInt();
outputs[1]=sc.nextInt();
outputs[2]=sc.nextInt();
outputs[3]=sc.nextInt();
outputs[4]=sc.nextInt();
outputs[5]=sc.nextInt();
outputs[6]=sc.nextInt();
outputs[7]=sc.nextInt();
program=createProgram(program);
random=createRandom(random, program);
for (int g=0;g<=100;g++) {
random=createRandom(random,program);
variables=new int [program[1]+2];
variables[program[1]+1]=1;
results[0]=run (program,variables,random);
variables[(program[1])+2]=inputs[0];
results[1]=run (program,variables,random);
variables[program[1]+2]=inputs[1];
results[2]=run (program,variables,random);
variables[program[1]+2]=inputs[2];
results[3]=run (program,variables,random);
variables[program[1]+2]=inputs[3];
results[4]=run (program,variables,random);
variables[program[1]+2]=inputs[4];
results[5]=run (program,variables,random);
variables[program[1]+2]=inputs[5];
results[6]=run (program,variables,random);
variables[program[1]+2]=inputs[6];
results[7]=run (program,variables,random);
variables[program[1]+2]=inputs[7];
bestProgram=findBestProgram(program, variables, random, bestProgram, bestVariables, bestRandom, inputs, outputs, results);
}
for (int i=0;i<=program[0];i++)
{
System.out.println(bestProgram[i]);
}
}
public static int[] createProgram(int[] program) {
program[0]=randInt(1,50);
program[1]=randInt(1,3);
for (int i=2;i<=program[0];i++)
{
program[i]=randInt(1,3);
}
return program;
}
public static int run(int[] program, int[] variables,int[][] random)
{
for (int i=2;i<=program[0];i++) {
switch (program[i]) {
case 1: variables[random[i][0]]=variables[random[i][1]]+variables[random[i][2]];
break;
case 2: variables[(random[i][0])]=(variables[(random[i][1])])-(variables[random[i][2]]);
break;
default: System.out.println("This error really shouldn't happen ever");
}
}
return variables[0];
}
public static int[][] createRandom(int[][] random, int[] program)
{
for (int i=0;i<=program[0];i++)
{
for (int a=0; a<=2;a++)
{
random[i][a]=randInt(1,3);
}
}
return random;
}
public static int[] findBestProgram(int[] program, int[] variables, int[][] random,int[] bestProgram, int[]bestVariables, int[][]bestRandom, int[] inputs, int[] outputs, int[] results)
{
int bestProgramResult=run(bestProgram, bestVariables,bestRandom);
int[] resultz;
resultz= new int [10000];
resultz[0]=Math.abs(results[0]-outputs[0]);
resultz[1]=Math.abs(results[1]-outputs[1]);
resultz[2]=Math.abs(results[2]-outputs[2]);
resultz[3]=Math.abs(results[3]-outputs[3]);
resultz[4]=Math.abs(results[4]-outputs[4]);
resultz[5]=Math.abs(results[5]-outputs[5]);
resultz[6]=Math.abs(results[6]-outputs[6]);
resultz[7]=Math.abs(results[7]-outputs[7]);
int programResult=results[0]+results[1]+results[2]+results[3]+results[4]+results[5]+results[6]+results[7];
if (programResult<bestProgramResult)
{
bestProgramResult=programResult;
for (int i=0;i<=program[0];i++)
{
bestProgram[i]=program[i];
bestVariables[i]=variables[i];
bestRandom[i]=random[i];
}
}
return bestProgram;
}
public static int randInt(int min, int max) {
Random rand = new Random();
int randomNum = rand.nextInt((max - min) + 1) + min;
return randomNum;
}
}
//1: _=_+_
//2: _=_-1
請提供相關部分的代碼。 – user3707125
Central.java的第50行是什麼? – JamesB
variables [(program [1])+ 2] = inputs [0]; – APCoding