2013-11-02 138 views
0

据我所知,这个程序是正确完成的。但是,鉴于它似乎没有例外。我将创建2个长度为x的数组(用户输入),用户将输入这些元素。完成。接下来,将每个元素乘以另一个数组中的相应元素并添加总和。越界异常乘数组

例,ARRAY1 [0] *数组2 [0] + ARRAY1 [1] *数组2 [1] ...

精确的错误是:异常在线程 “主” java.lang.ArrayIndexOutOfBoundsException:

我已经做了许多不同的循环,下面的最后一个循环,我有额外的空间来识别是我认为最接近正确,但不是。我非常感谢一些建议,提前谢谢。

System.out.println("This program will multiply 2 one dimension arrays of any length. \n The length and contents of the array is entered from the keyboard."); 
    System.out.println("Enther the data for the first array. "); 

    System.out.println("Enther the length of the array (remember arrays being counting at 0, not 1:"); 

    int a = 0; 
    Scanner keyboard = new Scanner(System.in); 
    a = keyboard.nextInt(); 
    int[] firstArrayLength = new int[a]; 
    System.out.println("Enter the elements of the first array(remember arrays begin counting at 0, not 1"); 
    double arrayElements = 0; 
    for (int elements = 0; elements <= firstArrayLength.length; elements++) { 

     arrayElements = keyboard.nextInt(); 
    } 

    System.out.println("Enter the data for the second array. "); 
    System.out.println("Enter the elements of the second array(remember arrays begin counting at 0, not 1"); 
    int[] secondArrayLength = new int[a]; 

    double secondArrayElements = 0; 
    for (int elements = 0; elements <= secondArrayLength.length; elements++) { 

     secondArrayElements = keyboard.nextInt(); 
    } 
    double [] thirdArray = new double [a]; 





    for (int i =0; i <=firstArrayLength.length; i++) 
     { 
     thirdArray[a] = firstArrayLength[i]*secondArrayLength[i]; 
     } 
    System.out.println(thirdArray); 
     } 
+0

我知道我的循环不加呢,我没有补充说因为我认为它现在还没有必要。 – user2946846

回答

1
,当你访问德阵列

更改<=符号<。例如:

for (int elements = 0; elements < firstArrayLength.length; elements++) 
... 

记住,如果length是4,你可以访问元素:

array[0], array[1], array[2], array[3] // 4 elements 

array[4]不存在,导致了IndexOutOfBounds例外。

编辑

奇怪输出[[email protected](例如)是因为你打印一个数组:

int a[] = new int[4]; 
System.out.println(a); 

相反,你可能要打印该数组的元素:

int a[] = new int[4]; 
for (int i = 0; i < 4; i++) { 
    System.out.println(a[i]); 
} 

编辑2

public static void main(String[] args) { 
    System.out 
      .println("This program will multiply 2 one dimension arrays of any length. \n The length and contents of the array is entered from the keyboard."); 
    System.out.println("Enther the data for the first array. "); 

    System.out 
      .println("Enther the length of the array (remember arrays being counting at 0, not 1:"); 

    int a = 0; 
    Scanner keyboard = new Scanner(System.in); 
    a = keyboard.nextInt(); 
    int[] firstArray = new int[a]; 
    System.out 
      .println("Enter the elements of the first array(remember arrays begin counting at 0, not 1"); 
    for (int elements = 0; elements < firstArray.length; elements++) { 

     firstArray[elements] = keyboard.nextInt(); 
    } 

    System.out.println("Enter the data for the second array. "); 
    System.out 
      .println("Enter the elements of the second array(remember arrays begin counting at 0, not 1"); 
    int[] secondArray = new int[a]; 

    for (int elements = 0; elements < secondArray.length; elements++) { 

     secondArray[elements] = keyboard.nextInt(); 
    } 
    double[] thirdArray = new double[a]; 

    for (int i = 0; i < firstArray.length; i++) { 
     thirdArray[i] = firstArray[i]*secondArray[i]; 
    } 

    for (int i = 0; i < thirdArray.length; i++) 
     System.out.println(thirdArray[i]); 
} 
+0

好的,帮助,但现在程序打印“[D @ 17b0b765”,而不是有效的答案。那是什么? – user2946846

+0

这是因为你正在打印一个数组对象。请参阅编辑。 – Christian

+0

好吧,我修复了这个问题,现在我的答案为0.0。小数点是因为如果我是正确的,那么这个数字是零,但是这个数字是把我扔掉的。 – user2946846

0

elements <= firstArrayLength.length ==>elements < firstArrayLength.length

arrayElements = keyboard.nextInt(); == >>firstArrayLength[elements] = keyboard.nextInt();

secondArrayElements = keyboard.nextInt(); == >>secondArrayLength[elements] = keyboard.nextInt();

+0

无论元素值如何,当前都打印0.0作为解决方案。建议呢? – user2946846

+0

是因为你在循环中键入第三阵列而产生的大厅代码。你应该这样做! – hasan83

+0

外面对不起。代码对齐! – hasan83