질문 제목 : JAVA 배열에 관한 에러입니다.
질문 요약 : 입력할 값의 갯수를 입력받아서 갯수만큼 값을 입력받고 그 값들을 오름차순으로 정리하는 소스입니다.
질문 내용 : 안녕하세요. 이번에 자바를 배우고 있는 초보입니다.
다른게 아니라 이번에 클래스 부분을 배워서 클래스로 배열을 구현해볼려고 하는데 잘 안되네요.
코딩을 다 했는데 한군데에서 에러가 납니다.
그런데 왜 에러가 나는지 이해가 잘 안가서 이렇게 염치불구하고 글을 올려봅니다.
그리고 한가지 더 궁금한 게 있습니다.
지금은 sorT[] sT = new sorT[indeX]; 으로 값의 갯수를 입력받았는데
처음에는 값의 갯수를 입력받는게 아니라 그냥 sorT[] sT = new sorT[10]; 정해서 정한 크기만큼만 받게 했었는데
계속 에러가 났습니다. 그래서 혹시나 하고 지금처럼 바꾸었더니 에러가 안나더군요.
왜 그런건지 이유가 좀 궁금합니다. 다소 허접한 질문 일수도 있으나 친절하게 알려주시면 감사하겠습니다.
-------------------------------------------------------------------------------------------------------------------
import java.util.*;
public class sorT {
private int numbeR;
public sorT(){
numbeR = 0;
}
public int geTsorT(){
return this.numbeR;
}
public void seTsorT(int numbeR) {
this.numbeR = numbeR;
}
public void toPsorT(int[] numbeR) { // 오름차순 정렬 메소드
for(int i = 0; i < numbeR.length; i++){
for(int j = i; j < numbeR.length; j++){
int changE =0;
if(numbeR[i] > numbeR[j]){
changE = numbeR[i];
numbeR[i] = numbeR[j];
numbeR[j] = changE;
}
}
}
for(int i = 0; i < numbeR.length; i++){
System.out.print(numbeR[i] + "\t");
}
}
public String toString(){
return String.format("%d", geTsorT());
}
}
-------------------------------------------------------------------------------------------------------------------
import java.util.*;
import java.io.*;
public class sorTmaiN extends sorT{
public static void main(String[] args) throws IOException{
Scanner inpuT = new Scanner(System.in);
int numbeR = 0;
int indeX = 0;
while(true){
System.out.print("숫자의 갯수를 입력하세요 : ");
indeX = inpuT.nextInt();
if(indeX > 0){
break;
} else{
System.out.println("다시 입력해주세요. 입력할 값은 숫자이거나 0이상이여야 합니다.");
System.out.println();
}
}
sorT[] sT = new sorT[indeX]; // 입력할 값의 갯수를 입력받는
for(int i = 0; i < sT.length; i++){
sT[i] = new sorT(); // 배열 초기화
}
for(int i = 0; i < sT.length; i++){
System.out.print((i + 1) + " 번째 숫자를 입력하세요 : ");
numbeR = inpuT.nextInt();
sT[i].seTsorT(numbeR); // 값을 저장
}
System.out.println();
System.out.println("입력하신 숫자는 다음과 같습니다.");
for(int i = 0; i < sT.length; i++){
System.out.printf("%s\t", sT[i].toString()); // 출력
}
for(int i = 0; i < sT.length; i++) {
sT[i].toPsorT(sT[i]); // 여기서 에러가 납니다.
}
}
}
-------------------------------------------------------------------------------------------------------------------
우선 메인 질문에 대한 답은 toPsorT(int []) 이기 때문에 sorT클래스인 sT[i] 값은 들어갈수없습니다.
만약 sorT[]을 넣어서 처리하고싶다면 메소드인자를 바꾸고 내부 로직도 맞게 수정해야 할겁니다.
그리고 어디선가 자바를 배우고 계신거라면 표기법에 대해서도 알려달라고 해주세요.
변수작명이나 클래스명에대한 명명규칙이 적용이 제대로 안되어있네요.
(안지켜도 프로그램은 돌아가지만 규칙은 어느정도 지켜주는것이 좋습니다.)
한가지더 extends를 하셨으면 sT[i].toPsorT(sT[i])를 할 필요 없이 그냥 호출하면 됩니다.
상속을 받았으므로 해당 메소드를 가지고있습니다.
마지막으로 10을 넣으면 에러가 난다고 하셨는데 10개의 칸이 있는데 입력값이 모자라거나 넘친다면 에러날수있습니다.
로직상으로는 배열의 모든 칸을 비교하기때문에 값이 없는 칸까지 비교하게 될겁니다.
혹은 값이 넘어가면서 11번째 칸에 접근하려고 시도하면 존재하지 않는 곳에 접근을 시도하므로 에러가납니다.
정확한 그 상황의 소스와 에러메세지를 보지 못해서 이정도로밖에는 답변을 해드리지 못하겠네요.
아직 배우고 계신 단계이기 때문에 지적당하는것을 부끄러워 하지 마시기바랍니다.
더 많은 발전이 있기를 바랍니다.
toPsorT에서 받는 건 int형 배열인데 보내주는건 sorT클래스를 보내주는거 아닌가요?