[급함!!] 자바 arraylist sort요~

[급함!!] 자바 arraylist sort요~

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

안녕하세요~

ArrayList sort 질문입니다..

 

전화번호 주소록이란 프로그램인데요,

간단하게 유저가 이름하고 전화번호를 입력하면

ArrayList name은 이름을 저장하고 (이름과 전화번호를 오브젝트로 만들어서 저장했습니다)

ArrayList number은 전화번호를 저장합니다.

 

그래서 알파벳순으로 이름을 쭉 프린트해야합니다.

대문자 소문자는 상관없습니다. 유저한테 이름을 입력할때 첫글자는 대문자로 넣으라고 해서요..

간단해 보이는데 생각처럼 쉽게 안되네요^^;;

 

우선 저는 outPut,outPut1이라는 오브젝트를 두개 만들어서

PhoneBookClass outPut;

PhoneBookClass I outPut1;

 

String temp = "A";

 

for(int i = 0; i<name.size(); i++)

{

outPut = (PhoneBookClass)name.get(i);

if(temp.compareTo(outPut.getName()) < 0) //여기서 getName()은 PhoneBookClass에 있는 method 인데요, 그냥 String entryName을 return합니다.

만약에 index[0]에 이름이 C이고, 번호가 1, index[1]에 이름이 B, 2이라면 temp가 A이니까, compareTo를 썼을때 -숫자가 나와야 되죠?

 

{

temp = outPut.getName();

System.out.println(temp); //여기서 그냥 프린트하는코드를 넣으면 B가 나와야 되는거 아닌가요? 실행하면 C가 나옵니다..

}

 

else if(temp.compareTo(outPut.getName() > 0)

{

temp = temp;

 

}

 

}

 

위에 if&else if만에 어떤 코드를 넣어야 되죠?

우선 compareTo를 써야하는건 알겠는데요, 그다음부터가 막히네요.

 

고수님들 부탁드립니다(__)

 

 

 



profile_image 익명 작성일 -


음, 질문 내용이 어렵진 않은데 좀 난해한 구석이 있어서 그냥 제 나름대로 코딩해 봤습니다.

컬러링을 한 부분을 유심히 보시면 원하시는 결과에 대한 힌트를 얻을 수 있지 않을까 싶은데 말이죠.

기본적으로 오름차순으로 정렬을 해야 하니까 대상1과 대상2에서 대상1 기준으로 볼 때 대상1이 대상2보다 작다면 (A가 B보다 작다면) 0보다 작은 값이 반환되어야 하고, 크다면 (C가 B보다 크다면) 0보다 큰 값이 반환되어야 합니다.

이런 규칙을 적용해 보면 쉽게 해결되지 않을까 싶네요.

만약 내림차순으로 하고 싶다면 반환되는 값을 서로 맞바꾸면 됩니다.

한 번 해보시고 잘 안 되면 쪽지 주세요~

코드도 같이 보내주면 더 쉽게 답변드릴 수 있을 거에요.


import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

public class PhoneBook {

    private List book = new ArrayList();

    public void add(String name, String number) {
        book.add(new Phone(name, number));
    }

    public void sort() {
        Collections.sort(book);
    }

    public void printAll() {
        for (int i = 0, size = book.size(); i < size; i++)
            System.out.println(book.get(i));
    }

    public static void main(String[] args) {
        PhoneBook book = new PhoneBook();
        BufferedReader reader = null;
        String retry = "Y";
        try {
            reader = new BufferedReader(new InputStreamReader(System.in));
            for (; "Y".equalsIgnoreCase(retry);) {
                System.out.print("name: ");
                String name = reader.readLine();
                System.out.print("number: ");
                String number = reader.readLine();
                book.add(name, number);
                book.sort();
                book.printAll();
                System.out.print("Retry? (Y or N)");
                retry = reader.readLine();
            }
        } catch (Exception e) {
            e.printStackTrace();
            System.exit(1);
        } finally {
            if (reader != null)
                try {
                    reader.close();
                } catch (Exception e) {
                }
        }
    }

}

class Phone implements Comparable {
    private String name;

    private String number;

    Phone() {
        this(null, null);
    }

    Phone(String name, String number) {
        this.name = name;
        this.number = number;
    }

    public String toString() {
        return name + " : " + number;
    }

    public int compareTo(Object obj) {
        Phone phone = (Phone) obj;
        int compare = name.compareTo(phone.getName());
        if (compare > 0)
            return 1;
        else if (compare < 0)
            return -1;
        compare = number.compareTo(phone.getNumber());
        return compare > 0 ? 1 : (compare < 0 ? -1 : 0);
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getNumber() {
        return number;
    }

    public void setNumber(String number) {
        this.number = number;
    }

}

[급함!!] 자바 arraylist sort요~

안녕하세요~ ArrayList sort 질문입니다.. 전화번호 주소록이란 프로그램인데요, 간단하게 유저가 이름하고 전화번호를 입력하면 ArrayList...