질문) 자바 오류 해결 좀 해주세요

 

public class Mome {

public static void main(String[] args) {
int a[] = {3,4,2,5,1};
int i,j;
int max=a[0],min=0,local=0,local2=0;
for(i=0;i<5;i++);
{
if(max<a[i])
{
max = a[i];
local=local+1;
}
}
System.out.println("최대값은"+max+"자릿값은"+local);
}
}
 

이렇게 하면 Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 5
at Mome.main(Mome.java:9) 라는 오류가 뜨는데 이 오류가 소스에서 배열이 초과될 때 발생한다고
하는데 어디서 잘못된건지 모르겠어서요..

 

 

http://kin.naver.com/qna/detail.nhn?d1id=1&dirId=1040201&docId=261834489

 

 

 

답변)  

 

 

1-1. CLASS

 

public class Mome {
  public static void main(String[] args) {

    int a[] = {3,4,2,5,1};
    int i, j;
    int max = a[0], local = 0;


    for(i = 0; i < 5; i++){
      if(max < a[i]){
        max = a[i];

        local = i + 1; // 자릿수에 'i'를 넣으면 끝!!

      }
    }
    System.out.println("최대값은" + max + ", 자릿값은" + local);
  }
}

 


 

1-2. CLASS


public class Mome {
  public static void main(String[] args) {

    int a[] = {3,4,2,5,1};
    int i, j;
    int max = a[0], local = 0;


    for(i = 0; i < 5; i++){
      if(max < a[i]){
        max = a[i];
      }
   
      if(i + 1 == a.length){  // i 가 배열의 갯수와 같아지면 자릿수를 구하기 시작한다.
        for(j = 0; j < a.length; j++){ // for문의 실행결과를 이용할 경우.

          if(a[j] == max) local = j + 1;
        }
      }
    }
    System.out.println("최대값은" + max + ", 자릿값은" + local);
  }
}



1-3. CLASS


public class Mome {
  public static void main(String[] args) {

    int a[] = {3,4,2,5,1};
    int i, j, k;
    int max = a[0], local = 0;


    if(a.length % 2 == 1){
      k = a.length / 2 + 1;
    }else{
      k = a.length / 2;
    }


    // 배열개수의 중간을 구해서 앞에서부터 시작한 배열값과, 뒤에서부터 시작한 배열값을 비교해서 자릿수를 구한다.
    for(i = 0, j = (a.length - 1); i < k; i++, j--){  

      if(max < a[i] || max < a[j]){
        if(a[i] > a[j]){
          max = a[i];
          local = i;
        }else{

          max = a[j];
          local = j;
        }
      }
    }
    System.out.println("최대값은" + max + ", 자릿값은" + (local + 1));
  }
}



2. RUN


최대값은5, 자릿값은4