2012-09-25 3 views
1
public static int[][] scalarMultiplication(int[][] A,int num) { 
    int[][] arrayScalarMul = new int[A.length][A[0].length]; 

    for (int x=0; x < arrayScalarMul.length; x++) { 
     for (int y=0; y < arrayScalarMul[x].length; y++) { 
      arrayScalarMul[x][y] = A[x * num][y * num]; 
     } 
    } 
    return arrayScalarMul; 
} 

의 부족, 내가 어떤 사람들은 길이 1로 단축의에하여 문제를 해결할 참조, 난 그냥 왜하지 않습니다 그게 필요한가요?스칼라 곱셈 - 제목이 내가 <code>ArrayIndexOutOfBoundsException</code> 오류를 받고 있어요 말한대로 배열 인덱스가 범위 예외

arrayScalarMul[x][y] = num * A[x][y]; 

당신은 주어진 스칼라와 인덱스를 곱하고 있지만 해당 인덱스의 값을 곱해야하는

+1

확실하게'x * num' 또는'y * num' *은 항상 유효한 인덱스가 아닙니다 * .. 예외를 읽습니다. 예외를 좋아해. 그것 * 거짓말하지 않습니다. 질문은 "너무 현지화"되어 있지만 희망적으로이 문제를 해결하는 방법에 대한 답변이 있습니다. 그러면이 질문은 폐지/삭제됩니다. –

답변

5
arrayScalarMul[x][y] = A[x * num][y * num]; 

변경을.

arrayScalarMul는 [X] [Y]는 [X *의 인분] * Y의 인분를] =들 때문에

+0

원래의 의도는 각 인덱스 값에 num을 곱한 것이라는 가정이 아닙니까? 유효한 색인 인 A [x * num] [y * num]에 액세스하여 그 값을 사용하고 싶다고 생각했습니다. – fayyazkl

+0

'스칼라 곱셈 (Scalar Multiplication) '이 그렇게 작동하지 않습니다. 제목을 기반으로, 내 가정이 정확하다고 말할 것입니다. – Azodious

+0

오류 - 예. 말이된다. 그 일에 집중하지 않았어. – fayyazkl

1

에러이고;

num에 x (또는 y)를 곱하면 경계 밖으로 벗어납니다.

일반적으로 인덱스 1 종료는 "off by 1 error"를 방지하기 위해 사용됩니다. 여기서 0 기반 배열이 있으므로 크기가 n 인 배열의 유효 인덱스 범위는 0에서 n-1 사이입니다. 그래서 우리는 < n 또는 < = n-1의 루프 조건을 사용합니다. 위의 경우는 아닙니다. 사용자의 긴장이 이 유효한 인덱스 제공된다 A [의 X *의 NUM]의 Y *의 NUM]와 [X] [Y]에서 값을 대체하는 경우

후이

같은 검사를 추가
if(x*num - totalx) && (y*num - totaly) 
    A[x][y] = A[x*num][y*num]; 
0

길이가 1보다 짧습니다.num이 가변적이기 때문에 작동하지 않습니다.

arrayScalarMul[x][y] = A[x * num][y * num]; 

생산량은 java.lang.ArrayIndexOutOfBoundsException입니다. 여기 * x * num * 및 y num *은 배열 인덱스에서 벗어납니다.