배열을 거꾸로 만드는 메소드

배열을 거꾸로 만드는 메소드

작성일 2019.12.05댓글 2건
    게시물 수정 , 삭제는 로그인 필요

안녕하세요. 배열을 거꾸로 만드는 메소드를 만들다가 막혀 질문합니다.




class StudentList { 
 private Student std[]; 
 private int number;

 // 생성자 매개변수가 없으면 배열 크기가 100이 되도록 생성
 public StudentList() {
  number = 0;
  std = new Student[100];
 }

 // 생성자: 배열의크기가 n이 되도록 생성
 public StudentList(int n) {
  std = new Student[n];
 }

 // i번째 학생을 return
 public Student StudentAt(int i) {
  if (i < number)
   return std[i];

  return null;
 }

 // 학생추가
 public void append(Student s) {
  if (number < std.length)
   std[number++] = s;
  else
   System.out.println("Error");
 }

 // nm과 일치하는 이름의 학생 반환
 public Student getByName(String nm) {
  Student abc = null;
  for (int i = 0; i < number; i++) {
   if (std[i].getName().equals(nm)) {
    abc = std[i];
    break;
   }
  }
  return abc;
 }

 // 배열 출력
 public void print() {
//  for (Student s : std)
//   System.out.println(s);
  for (int i = 0 ; i < number ; i++)
   System.out.println(std[i]);
 }

 // sort를 위한 메서드
 private void swap(int i, int j) {
  int tmp = std[i].getScore();
  std[i].changeScore(std[j].getScore());
  std[j].changeScore(tmp);
  
  tmp = std[i].getId();
  std[i].setId(std[j].getId());
  std[j].setId(tmp);
  
  String ts = std[i].getName();
  std[i].setName(std[j].getName());
  std[j].setName(ts);
 }

 // 전체 학생의 평균을 반환
 public double average() {
  int sum = 0;
  for (int i = 0; i < number; i++) {
   sum += std[i].getScore();
  }
  return (double) sum / number;
 }

 // 성적순으로 정렬
 public void sortByScore() {
  int i, j, min;
  for (i = 0; i < number - 1; i++) {
   min = i;
   for (j = i+1; j < number; j++) {
    if (std[j].getScore() < std[min].getScore())
     min = j;
   
   }
   swap(i, min);
  }
 }

 // 배열을 현재 순서의 거꾸로 만드는 메소드
 public void reverse() {
  for (int i = 0; i < std.length / 2; i++) {
   swap(1, (std.length - 1) - i);
  }
 }






마지막에 //배열을 현재 순서의 거꾸로 만드는 메소드가 제가 만든 코드가 아무리 봐도 틀린 것 같은데.. 어떻게 바꿔야할까요??



profile_image 익명 작성일 -

다른 로직 함수에 문제가 없다고 가정하고요, swap도 잘된다고 가정하고 reverse만 살펴보면요.

예를 들어 length = 6 이라면

[ 0 ] [ 1 ] [ 2 ] [ 3 ] [ 4 ] [ 5 ]

이렇게 생겼으니 0~2까지 돌면서 0과 5를 바꾸고, 1과 4를 바꾸고, 2와 3을 바꿔야겠네요?

length = 5 라면(홀수의 경우)

[ 0 ] [ 1 ] [ 2 ] [ 3 ] [ 4 ]

이렇게 생겼으니 0~1까지 돌면서 0과 4를 바꾸고, 1과 3을 바꾸겠습니다.

여기에서 for 문의 엔딩 조건은 i < length / 2 로 사용하면 적절하다는 것을 알 수 있고요.

for 문의 시작은 0으로 시작할 것이고요. 그러면 만드신것과 거의 일치하는데요.

바꾸는 swap은 i 와 (std.length - 1) - i 끼리 바꿔야겠지요?

위 reverse 내부에서 swap(i, (std.length - 1) - i) 로 바꾸시기만 하면 잘 될 것 같습니다.

profile_image 익명 작성일 -

배열 하나를 더 생성하셔서 옮기셔야합니다.

배열을 거꾸로 만드는 메소드

... 배열을 거꾸로 만드는 메소드를 만들다가 막혀 질문합니다. class... i++) System.out.println(std[i]); } // sort를 위한 메서드 private void swap(int...

자바 코드 오류

... println(s); } // sort를 위한 메서드 private void... getScore()) swap(i,j); } } } // 배열을 현재 순서의 거꾸로 만드는 메소드 public void reverse...

컴퓨터 관련(IT) 용어 20개 알려주세요

... 모호하게 만드는 편법을 사용하는데, 이렇게 하면... 위해서 만드는 인터페이스. AppleShare File Server 애플톡... 각 부품을 연결해 만드는 회로를 어떤 경로로, 어떤...

자바 실행 에러 코드..

... println(std[i]); } // sort를 위한 메서드 private void... getScore()) swap(i, j); } } } // 배열을 현재 순서의 거꾸로 만드는 메소드 public void...

C# 인덱서에 대해서...

... i++) Console.WriteLine(ob[i]); } } } 답변을 거꾸로 해야... Length < index - 1) { // 여기서 배열을 늘려 주던지, 아니면 저장을 안하던지 // 그건 만드는 사람이...