버그 해결을 위한 모든 질문을 던져
0 votes
116 views
행렬곱을 할려는데

public class practice6_4 {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
         int[][] a = {{10, 20}, {30, 40}};
    

         int[][] b= new int[2][2];
     int n;
     n=0;
     b = a*a;// 왜 안되는거야

    }

이런식으로 했는데 for 문 안쓰고 하는 방법은 없는건가요? a행렬을 a*a한것을 b 에다가 값으로 넣고 싶습니다.
asked (2 point) , 116 views

2 answers

0 votes
자바에는 연산자 오버로딩이 지원되지 않습니다.

따라서, 방법은 없습니다...
answered (103 point)
+1 vote

우선 작성자 분께서 원하시는 오퍼레이션이 정확히 무엇인지를 알아야 할 필요가 있어 보이네요. a*a의 의미가 Array의 각 엘리먼트를 위치에 맞춰서 단순히 곱하는 것이라면 Java의 Stream을 이용하면 for를 이용하지 않고도 원하는 결과를 얻을 수 있습니다. 아래와 같은 코드를 이용하면 됩니다.

int[][] a = {{10, 20}, {30, 40}};
int[][] b = Arrays.stream(a).map(sa -> Arrays.stream(sa).map(i -> i * i)).toArray()).toArray(int[][]::new);

다만 행렬곱의 경우 일반적인 언어 차원에서 지원되는 연산이 아니므로 어차피 커스터마이즈된 오퍼레이션을 구현하셔야 합니다.

자주 이용해야 한다면 클래스화를 한 후에 각 오퍼레이션에 대한 메소드를 정의해 두는것을 추천 드립니다.

개인적인 의견으로는 어차피 n * m X m * n 행렬곱 연산을 구현할때는 2차원적인 접근이 필수적이므로 저라면 그냥 for를 이용해서 구현할 것 같습니다.

answered (186 point)

버그 해결을 위해 도움을 구하고, 도움을 주세요. 우리는 그렇게 발전합니다.

throw bug 는 프로그래밍에 대한 전분야를 다룹니다. 질문,논의거리,팁,정보공유 모든 것이 가능합니다. 프로그래밍과 관련이 없는 내용은 환영받지 못합니다.

126 질문
221 answers
253 댓글
245 users