java 자바 for문 중 배열length관련 질문
for(int i=0; i<5; i++) {
int sum += intArray[i].length;
if(i==4) {
System.out.print(sum + "개의 정수를 입력하시오>>");
}
}
위와같은 for문을 작성중인데 두번째줄 sum선언에서 오류가 생깁니다.
int intArray[][] = new int[5][];
intArray[0] = new int[4];
intArray[1] = new int[1];
intArray[2] = new int[2];
intArray[3] = new int[3];
intArray배열은 위처럼 비정방형 배열로 선언해놓은 상태입니다.
scanner를 사용해 각 배열의 값을 입력받으려고 하는데요
"'총 배열의 개수'를 입력하시오 "라고 출력을 하고싶습니다
총 배열의 개수를 구하는 방법으로 저는 위와같이 for문을 사용해서 구하고 싶었습니다.
제가 묻고싶은 곳은 int sum += intArray[i].length; 부분의 '+='부분에서 Syntax Error가 발생한다는겁니다
다른 곳에서는 잘만 되던 +=가 저 for문에서만 에러가 발생합니다
int sum = sum + intArray[i].length; 로 바꾸어도 두번째sum에서 초기화가 되지 않았다고 오류가발생합니다.
원인이 무엇일까요? 도와주세요 ㅠㅠ
sum을 for 문 밖에서 선언을 해주고 해야 될 것 같은데요??
아래처럼...
안되면 말씀해주세요. 해보진 않아서..
int sum =0;
for(int i=0; i<5; i++) {
sum += intArray[i].length;
if(i==4) {
System.out.print(sum + "개의 정수를 입력하시오>>");
}
}
안녕하세요.
for 문 안에
int sum += intArray[i].length;
이 부분을
sum += intArray[i].length;
이렇게 써 주시고
sum은 for문 위에서 선언을 해주셔야 될것 같습니다.
for 문 돌면서 sum이 계속 재선언 되면서 문제가 발생하는 듯 하네요.
질문하신 내용중에도 있지만 Syntax Error (문법적 오류) 입니다.
int sum = 0; for (int i = 0; i < 5; i++) { sum += intArray[i].length; if (i == 4) { System.out.print(sum + "개의 정수를 입력하시오>>"); } }for -loop 블럭 밖에서 sum을 초기화 해주고 난 뒤 += 연산을 해야합니다.
for -loop 블럭 안에서 초기화 후 += 연산을 하도록 코딩해도 Syntax Error 가 나진않지만
loop 될때마다 초기화 되기 때문에 의미 없는 코드가 되겠죠.
최종적으로 Scanner를 이용해서 값을 입력받는 샘플 소스 입니다.
public static void main(String[] args) { Scanner scanner = new Scanner(System.in); int[][] intArray = new int[5][]; intArray[0] = new int[4]; intArray[1] = new int[1]; intArray[2] = new int[2]; intArray[3] = new int[3]; int sum = 0; for (int i = 0; i < intArray.length; i++) { if (intArray[i] != null) { sum += intArray[i].length; } } System.out.print(sum + "개의 정수를 입력하세요.(ex.1,2,3)>>"); String inputString = scanner.nextLine(); System.out.println(inputString); }안녕하세요.
아래와 같이 해보세요.
public class Main { public static void main(String[] args) { int intArray[][] = new int[5][]; intArray[0] = new int[4]; intArray[1] = new int[1]; intArray[2] = new int[2]; intArray[3] = new int[3]; intArray[4] = new int[5]; int sum = 0; for(int i=0; i<5; i++) { sum += intArray[i].length; if(i==4) { System.out.print(sum + "개의 정수를 입력하시오>>"); } } } }그리고 배열 초기화할때 5번째를 초기화 안하면 null pointer error가 나서 intArray[4]를 추가했고,
length를 선언문이 아니라 일반적인 수식으로 변경하였습니다.
sum += intArray[i].length;이렇게요,
감사합니다.
+= 연산자는 선언과 동시에 값을 할당하려 하지 마시고
다음의 형태로 for 문 바깥에서 초기화 해주시고 값을 연산 하시기 바랍니다 :)
이렇게 해주시면 Syntax Error는 해결될 것으로 보입니다.
int sum = 0; for (int i = 0; i < 5; i++) { sum += intArray[i].length; }코드 여러 곳에서 오류가 있어 보입니다.
우선 sum이라는 변수는 for문이 끝나면 아래에서 접근 할 수 가 없습니다.
int sum = sum + intArray[i].length 코드는 sum이라는 변수가 선언이 되지도 않았기 때문에 오류가 나는 것입니다.
sum에 값을 넣기 위해서는 sum라는 것과 intArray[i].length 값을 더해야합니다.
즉 sum + intArray[i].length 코드가 먼저 실행이 되는데 sum은 어디에도 선언이 되어 있지 않습니다.
연산이 끝난후에 sum이라는 변수가 선언 되기 때문에 연산을 하는 시점에는 sum이 선언이 되어 있지 않습니다.
int intArray[][] = new int[5][]; intArray[0] = new int[4]; intArray[1] = new int[1]; intArray[2] = new int[2]; intArray[3] = new int[3]; intArray[4] = new int[3]; int sum = 0; for(int i=0; i<5; i++) { sum += intArray[i].length; if(i==4) { System.out.print(sum + "개의 정수를 입력하시오>>"); } }아래와 같은 코드가 될텐데요, int sum에 대한 초기화를 해주어야 더한다고 해도 더해지겠죠.
어디다 더해줄 것인지, 더할 게 없는 데 더하라고 하니까 구문 오류가 난 것입니다.
int intArray[][] = new int[5][];
intArray[0] = new int[4];
intArray[1] = new int[1];
intArray[2] = new int[2];
intArray[3] = new int[3];
int sum =0; // sum에 대한 초기화는 안되어있었음.
for(int i=0; i<5; i++) {
sum += intArray[i].length;
if(i==4) {
System.out.print(sum + "개의 정수를 입력하시오>>");
}
}
배열로 선언해서 캐스팅된 것과 정수로 선언한게 미스매치되니 연산이 안되는 것입니다.
하지만 이대로라고 해도 null pointer exception에 빠지게 될겁니다. 선언된 배열의 인덱스가 5이니 4개만 강제 할당해주고 하나가 null입니다.
int 2차원 배열에서 각각 다른 길이를 가질 수 없습니다.
int 배열이 아니라 Arraylist로 int배열을 형식자로 하신다음에 arraylist 의 get함수로 배열을 읽고 그다음에 length함수로 길이 구하시면 원하는 대로 작동할듯 합니다. 한번 해보시고 오류가 난다면 오류와 코드 올려주세요