2016-05-17 4 views
0

product()メソッドは、ArrayListの要素を掛けて、これらの要素の乗算である整数nを返します。 Test()クラスでは、productList()メソッドを呼び出し、ArrayList( 'lis')を操作し、値 'n'を出力します。リストのmuliply要素で、パラメータとしてArrayListを持つメソッド

import MathBasic.SimpFraction; 
import java.util.ArrayList; 

public class Test { 

public static void main(String[] args) { 

    ArrayList<Integer> lis = new ArrayList<>(); 

    for (int i=1;i<=6;i++){ 
     lis.add(i); 
    } 

    int result = SimpFraction.product(lis); 

    System.out.println(result); 
    } 
} 

//mathbasic package 

package MathBasic; 

import java.util.ArrayList; 

public class SimpFraction { 
    public static int product (ArrayList<Integer> m){ 
     int n = 1; 
     for (int i = 0; i <= m.size(); i++) 
      n = n*m.get(i); 
     return n; 
    } 
} 

コードをコンパイルすると、それは休閑エラーを生成します。あなたのループの製品法の境界条件では

run: 
Exception in thread "main" java.lang.IndexOutOfBoundsException: Index: 6, Size: 6 
    at java.util.ArrayList.rangeCheck(ArrayList.java:653) 
    at java.util.ArrayList.get(ArrayList.java:429) 
    at MathBasic.SimpFraction.product(SimpFraction.java:94) 
    at cubicequationTest.main(cubicequationTest.java:32) 
C:\(...)\NetBeans\Cache\8.1\executor-snippets\run.xml:53: Java returned: 1 
FALHA NA CONSTRUÇÃO (tempo total: 0 segundos) 

答えて

0

は間違っています。あなたはインデックス6の要素に到達したいが、サイズ6のarraylistはインデックスとして最大数5を持つ。

1

正しくループしています。

public class SimpFraction { 
    public static int product (ArrayList<Integer> m){ 
     int n = 1; 
     for (int i = 0; i <= m.size(); i++)//this is incorrect 
      n = n*m.get(i); 
     return n; 
    } 
} 

上記のコードは、0, 1, 2, 3, 4, 5, 6からループしています。任意のリストの最初のインデックスは0あり、そしてあなたがint i = 0あなたがそう

for (int i = 0; i < m.size(); i++)//this is correct 
よう <

<=を変更する必要がありますので、あなたのリストのサイズのみ6

ときが7総増分があります

これはループします0, 1, 2, 3, 4 , 5そしてインデックスの総数を過ぎていません

+0

それは働きます!ありがとう。私はPythonからJavaに移行していますが、私はそれに精通していません。 –

+0

@Edilon Junior Glad私は助けることができました!問題を解決した場合、この回答に正しいとマークしてください。ありがとう! :) – sbowde4

関連する問題