여덟 번째 수업

정혅·2024년 2월 19일

더 조은 아카데미

목록 보기
13/76

복습

액세스 메소드

public class Person{
//public 클래스의 이름과 파일명은 같아야하고, java파일 안에는 public class가 한개만 존재할 수 있다

    private String name; //멤버변수 웬만하면 private로
    private int age;
    Person(String name, int age) //생성자와 클래스의 이름은 같아야하고 반환하는 값이 있으면 x
    //클래스 접근제어 지시자가 public 이면 메소드도 public으로 두는게 논리적으로 좋다.
    {
        this.name = name;
        this.age = age;
    }
    public void setName(String name)
     //단어가 두개일때 첫글자 대문자로(카멜규칙)
    {
        this.name = name;
    }
    public String getName()
    {
        return name;
    }
    public void setAge(int age)
    {
        this.age = age;
    }
    public int getAge()
    {
        return age;
    }
}
//name과 age를 액세스 메소드로 만든

패키지 실습(FruitSalesMain3)

  • class마다 각각의 파일로 저장(파일 명은 class명과 동일)

  • 패키지화 할 class는 제일 상단에서 packag화 해야한다.(단 한번 가능)

  • 각 파일들을 연결해서 컴파일 해야하기 때문에 class 의 제어연산자를 public으로 변경해야한다.(안하면 default)

  • 호출하는 클래스들은 import선언 해줘야한다.

    • import선언은 package밑에 선언되어야 한다.

    • import선언 할 때 packge까지 다 적어서 경로설정을 해야한다.

      • import해주지 않으면 코드 속 해당 클래스들을 작성할 때 패키지위치까지 다 일일이 적어야하기 때문에 import가 편리하다.

배치파일 - 위 패키지 실습한것을 배치파일을 이용해 한번에 컴파일

  • 한줄에 단 하나의 명령어만 들어간다.

    • 세미콜론을 따로 찍지 않는다
  1. javac -d . 파일명.java : 확장자가 java인 모든파일을 패키지까지 포함해 컴파일

  2. java FruitSalesMain3

  3. pause : 넣지 않으면 실행 후 바로 종료됌

  4. 확장자를 .bat 로 저장


캡슐화

정보 은닉

  • 모든 클래스는 반드시 특정 패키지 않에 소속되어야한다.

    • 따로 설정하지 않으면 java에서 이름없는 패키지로 자동 소속 시킨다.
  • 좌표는 반드시 정수로, 음수가 될 수 없다

    • 그러므로, 음수를 입력하면 잘못된 값이라고 출력하는 문장이 필요

클래스 변수 - static

인스턴스 변수에 static이 붙으면 클래스 변수

static이 붙지 않으면 인스턴스 변수

모든 객체가 공유하는 변수

처음 호출될 때 초기화된다. <> 인스턴스 변수는 객체 생성 new 된 후에 초기화 된다.

  • 인스턴스 변수는 각각 고유한 값을 가지지만 클래스 변수는 모든 인스턴스가 공통된 값을 공유한다. > 처음 호출될 때 초기화되고, 그 이후에는 초기화가 되지 않기 때문에

    • 한 클래스의 모든 인스턴스들이 공통적인 값을 가져야할 때 클래스 변수로 선언
  • 클래스가 로딩될 때 생성되어, 종료될 때 까지 유지되는 클래스 변수는 public을 붙이면 같은 프로그램 내에서 어디서든 접근할 수 있는 전역 변수가 된다.

  • 인스턴스 변수의 접근법과 다르게 인스턴스를 생성하지 않고 클래스 이름, 클래스 변수명을 통해 접근 가능하다.

class Number
{
    public int num1; //> 인스턴스 변수 (satatic안붙음)
    public static int num2; //static이 붙은 변수 > 클래스 변수
    Number()
    {
        num1++;
        num2++; //num1은 초기화가 되어서 객체마다 다시 증감되지만 num2는 공유하기 때문에 증감되어도, 객체들이 공통적인 값을 가진다.
    }
    public static void printNumber(){
     //static으로 클래스 메소드 = static메소드 
        System.out.println(num2);
        System.out.println(num1);//에러 인스턴스 변수 참조
     }
    public void pirntNumber()//인스턴스 메소드 
    {
        System.out.println(num1 + " " + num2);
    }
}
class NumberMain{
    public static void main(String[]args){ //객체 생성
        Number n1 = new Number();
        Number n2 = new Number();
        Number n3 = new Number();

        n1.printNumber(); //1,3출력
        n2.printNumber(); //1,3출력
        n3.printNuber(); //1,3출력
        System.out.println(n1.num1); //1출력
        System.out.println(n1.num2); //3출력

        Sysetem.out.println(Number.num1);//오류 
        //인스턴스 변수는 클래스이름으로 호출할 수 없다.

        n1.num1 = 20;
        n3.num1 = 30;
        System.out.println(n1.num1);//1출력
        System.out.println(n1.printNumber);//20과 3출력

-----------------------------------------------------------------------------------------------------------------------------------

         Number.printNumber2(); 
           //에러 -static메소드에서는 인스턴스 메소드를 참조할 수 없으므로 
          System.out.println(Number.num2);
          //클래스 변수는 클래스 이름으로 접근한다 > 가독성
          System.out.println(n1.num2); 
          //위와 같지만 참조변수로 접근이여서 가독성이 떨어짐

          Number.printNumber2(); //클래스 이름으로 클래스메소드를 호출하는게 더 가독성이 좋음 - 바로 클래스 변수인것을 알 수 있어서
   } 
}

static메소드 내에서는 인스턴스 메소드, 인스턴스 변수 참조 x

대신 인스턴스 메소드 안에 클래스 변수 참조 가능

위 식의 현재 인스턴스 변수는 public이므로 class끼리 호출 가능

  • 지금까지 인스턴스 변수(=멤버 변수)를 호출할 때 객체를 만들어 그 주소값을 가지고있는 참조변수 뒤에서 선언했는데, static 변수(=클래스 변수)는 class이름 뒤에서 바로 호출 할 수 있다.

    • 클래스 이름으로 인스턴스 변수 호출은 불가능

    • 참조변수 뒤에 static변수 호출 가능 > 그러나 가독성 떨어짐

  • 클래스 변수는 클래스 이름으로 호출

    • 객체가 생성될 때 마다 num1은 0으로 초기화되었다가 증감되는데, num2는 클래스 변수로 0으로 초기화 되지 않고 값이 그대로 있다가, 객체가 생성될 때 마다 식대로 증감되어서 결국 num2는 3으로 출력되는것이다.


클래스 메소드, 변수 문법 정리

class Number
{
    private String name; //인스턴스 변수 
    private static int age; //static변수 = 클래스 변수 

    public void hi()
    {
        System.out.println(name + " " + age);
         //인스턴스 메소드 내에서 클래스 변수 참조 가능
    }
    public static void bye()
    {
        System.out.println(name); 
        //에러 - static메소드 내에서 인스턴스 변수 참조 x
        System.out.println(age);
        hi(); 
        //hi(); 에서 에러 - static 메소드 내에서 인스턴스 메소드 호출 x
    }

}
  • 인스턴스 메소드 내에서 > 인스턴스 변수, 클래스 변수 참조 o

  • 클래스 메소드 내에서 > 클래스 변수 참조 o, 인스턴스 변수 참조 x

지금까지는

main메소드에서 인스턴스 변수를 참조하려면 객체를 생성 > 호출


이 문장을 static메소드, 변수로 변경할 수 있는것은 다 변경하기

class SimpleMath    // 단순 계산 클래스
{
    public static final double PI=3.1415;    
    public double add(double n1, double n2){ return n1+n2; }
    public double min(double n1, double n2){ return n1-n2; }
    public double mul(double n1, double n2){ return n1*n2; }
}

class AreaMath    // 넓이 계산 클래스
{    
    public double calCircleArea(double rad)
    {
        SimpleMath sm=new SimpleMath();
        double result=sm.mul(rad, rad);
        result=sm.mul(result, SimpleMath.PI);
        return result;
    }
    public double calRectangleArea(double width, double height)
    {
        SimpleMath sm=new SimpleMath();
        return sm.mul(width, height);
    }
}

class PerimeterMath    // 둘레 계산 클래스
{    
    public double calCirclePeri(double rad)
    {
        SimpleMath sm=new SimpleMath();
        double result=sm.mul(rad, 2);
        result=sm.mul(result, SimpleMath.PI);
        return result;
    }
    public double calRectanglePeri(double width, double height)
    {
        SimpleMath sm=new SimpleMath();
        return sm.add(sm.mul(width, 2), sm.mul(height, 2));
    }
}

class HowMethod
{
    public static void main(String[] args)
    {
        AreaMath am=new AreaMath();
        PerimeterMath pm=new PerimeterMath();

        System.out.println("원의 넓이: "+am.calCircleArea(2.4));
        System.out.println("직사각형 둘레: "+pm.calRectanglePeri(2.0, 4.0));
    }
}

정답

class SimpleMath    // 단순 계산 클래스
{
    public static final double PI=3.1415;    
    public static double add(double n1, double n2){ return n1+n2; }
    public static double min(double n1, double n2){ return n1-n2; }
    public static double mul(double n1, double n2){ return n1*n2; } //인스턴스 메소드를 참조하는 구문이 없기 때문에 static메소드로 변경 가능
}

class AreaMath    // 넓이 계산 클래스
{    
    public static double calCircleArea(double rad) //인스턴스 참조 x하므로 클래스 메소드로 변경 가능
    {
        double result=SimpleMath.mul(rad, rad);
        result=SimpleMath.mul(result, SimpleMath.PI); //mul을 클래스 메서드로 만들어서 굳이 클래스 이름으로 호출하고 객체 생성 필요 x
        return result;
    }
    public static double calRectangleArea(double width, double height) //statir메소드를 참조하므로 static메소드로 변경 가능
    {
        return SimpleMath.mul(width, height); //mul을 클래스 명으로 호출하고 객체 생성 필요 x
    }
}

class PerimeterMath    // 둘레 계산 클래스
{    
    public static double calCirclePeri(double rad) //인스턴스 변수, 메소드 호출 x로, static메소드로 변경가능
    {
        double result=SimpleMath.mul(rad, 2);
        result=SimpleMath.mul(result, SimpleMath.PI);
        return result;
    }
    public static double calRectanglePeri(double width, double height)
    {
        return SimpleMath.add(SimpleMath.mul(width, 2), SimpleMath.mul(height, 2));
    }
}

class HowMethod
{
    public static void main(String[] args)
    {    
        System.out.println("원의 넓이: "+AreaMath.calCircleArea(2.4));
        System.out.println("직사각형 둘레: "+PerimeterMath.calRectanglePeri(2.0, 4.0)); //다 클래스 메소드로 변경되어서 클래스 이름으로 호출 가능
    }
}
  • 먼저 인스턴스 메소드, 변수를 참조하지 않는 메소드를 찾고 static을 넣는다.

  • 클래스 메소드로 변경시킨 메소드를 참조하는 부분들을 찾아 객체 생성을 삭제하고 클래스 명으로 호출되게끔 수정한다.

이렇게 차례차례로 static화 시키면 된다.


static 문법적으로 어떻게?

public static final double PI = 3.14;

  • 보통 접근제어자, static 상수 자료형 변수명 의 순서대로 작성한다 > 가독성
class Circle{

    public static final double PI = 3.14;
    double radius = 4;
    public double areaOfCircle(){
        return PI * radius * radius;
    }
}
  • areaOfCircle메서드를 static으로 변경할수 없다

    • 인스턴스 변수radius가 존재하기 때문에
class Circle{

    public static final double PI = 3.14;

    public static double areaOfCircle(double radius){
        return PI * radius * radius;
    }
}
  • radius를 매개변수의 값으로 받아오게 하고, 존재하던 인스턴스 변수는 삭제해준다.

static 변수 참조 과정1

class InstCnt
{
    static int instNum=0;

    public InstCnt()
    {
        instNum++;
        System.out.println("인스턴스 생성: "+instNum);
    }
}

class ClassVar
{
    public static void main(String[] args)
    {
        InstCnt cnt1=new InstCnt();
        InstCnt cnt2=new InstCnt();
        InstCnt cnt3=new InstCnt();
    }
}
  • cnt1 객체 생성 > instNum(0) 참조 > 증감(1) > 1 출력

  • cnt2 객체 생성 > instNum 참조(1) > 증감(2) > 2 출력

  • cnt3 객체 생성 > instNum 참조(2) > 증감(3) > 3 출력


참조 과정 2

class AccessWay
{
    static int num=0;

    AccessWay()
    {
        incrCnt();
    }
    public void incrCnt(){num++;}
}

class ClassVarAccess
{
    public static void main(String[] args)
    {
        AccessWay way=new AccessWay();
        way.num++;//이건 조금 가독성이 떨어짐, 인스턴스 변수인지 클래스 변수인지 알수 없기에 
        AccessWay.num++;//이게 더 가독성이 좋음 클래스 호출은 무조건 클래스 변수니까
        System.out.println("num="+AccessWay.num);
    }
}
  • way객체 생성 > 그 객체 속에 incrCnt메서드 존재 > 메소드 속num++되서 num로 변경 (객체 생성될때 메서드 안에 구문 실행)

    • 다시 main메소드로 돌아와서 way.num++로 num은 2가 되고,

    • AccessWay.num++;로 num은 3이 되어 3이 출력된다.


참조 과정 3

class InstCnt
{
    static int instNum=100; 
    //처음에는 0으로 초기화되고, 그 후에 명시적 초기화를 통해 100으로 초기화

    public InstCnt()
    {
        instNum++;
        System.out.println("인스턴스 생성: "+instNum);
    }
}

class StaticValNoInst
{    
    public static void main(String[] args)
    {
        InstCnt.instNum-=15;
        System.out.println(InstCnt.instNum);
    }
}

참조 과정 4

class AAA
{
    int aaa;
    public AAA(int num){ aaa=num; }

    public static void main(String[] args)
    {
        AAA ins1=new AAA(10);
        BBB ins2=new BBB(20);

        System.out.println("ins1.aaa="+ins1.aaa);//10출력
        System.out.println("ins2.bbb="+ins2.bbb);//20출력
    }
}

class BBB 
{
    int bbb; //인스턴스 변수
    public BBB(int num){ bbb=num; } //생성자

    public static void main(String[] args)
    {
        AAA ins1=new AAA(11);
        BBB ins2=new BBB(22);//본인 클래스 안에서 본인의 객체를 만드는것 가능

        System.out.println("ins1.aaa="+ins1.aaa);//11출력
        System.out.println("ins2.bbb="+ins2.bbb);//22출력
    }
}
  • AAA class와 BBB class가 생성되는데, 컴파일 후 원하는 클래스의 메인 메서드를 실해시키고 싶다면 cmd에서 java AAA 이런식으로 출력하면 된다.

참조 과정 5

class Circle
{
    static final double PI=3.1415;
    private double radius;

    public Circle(double rad){ radius=rad; }
    public void showPerimeter()   // 둘레 출력
    {
        double peri=(radius*2)*PI;
        System.out.println("둘레: "+peri);
    }
    public void showArea()    // 넓이 출력
    {
        double area=(radius*radius)*PI;
        System.out.println("넓이: "+area);
    }
}

class ClassVarUse
{
    public static void main(String[] args)
    {
        Circle cl=new Circle(1.2);
        cl.showPerimeter();
        cl.showArea();
    }
}
  • 넓이 출력 메서드를 클래스 메서드로 변경하고 싶다면

    • public static void showArea(double radius){}

    • 식으로 radius의 값을 받아와야한다.

      • radius는 현재 인스턴스 변수이기 때문이다.

참조 과정6

class Number{

    int num;
}

class NumberMain{

    public static void main(String[]args){

        System.out.println(Number.num); //인스턴스 변수니까 에러 <> num이 클래스 변수면 가능

        Number n1 = new Number();
        System.out.println(n1); //객체 생성해서 이렇게 출력

    }
}

참조 과정 7

class Number{

    public void hi(){

        System.out.pritln("hi");
    }
}
class NumberMain{
    public static void main(String[]args){

        System.out.println(Number.hi()); //인스턴스 메서드 호출 > 에러
    }
}

기본 개념 문제 풀이 (틀린 것)

  • 변수에 PI도 들어가는 줄 알았다.


  • 대문자의 존재를...잠시 생각하지 않았다.

  • Byte 는 첫글자가 대문자니까 클래스가 된다.


  • char은 덧셈연산을 하게 되면 int로 자동형변환이 일어나 아스키코드값으로 변한다.

    • int형보다 작은 타입은 int형으로 변환된 후에 연산이 진행된다.
  • 1의 문자값이 49인지 몰랐다.

    • 1의 문자코드 값 : 49 / 2의 문자코드 값 : 50
  • 문자 + 문자의 덧셈 결과가 정수값이 되는지 몰랐다


  • 키워드 true 와 True는 다름

  • 우리가 사용하는건 class

  • System은 변수 이름



)

  • Max_Num 안되는줄..

  • 대소문자가 구분되므로 우리가 사용하는 건 if키워드고, If는 대문자므로 다르다고 구분 > 실제로 소스코드짤때는 굳이 헷갈리게 사용하지는 않음


  • d, e는 원래 본래 자료형보다 변환된 자료형이 더 작기때문에 생략 가능


  • a - byte의 범위를 넘어서 저장 불가

  • b - char은 반드시 한 개의 문자를 지정해서 초기화해야한다.

    현재 문제에는 아무것도 없는것 > ' ' 공백이 존재하면 가능

  • c - 한 글자만 가능 > 두 글자 이상이면 String

  • d - 실수형은 double로 자동인식 하기때문에 뒤에 F 붙여줘야한다.

  • e - 1.4e3f = 1.4 * 10의 3승(2표기법)


  • c - args 는 변수이름이기 때문에 다르게 줘도 상관 없다.

  • d - main 앞에는 반드시 반환되는 값이 와야한다.


아스키 코드 값 (암기)

  • 영어 대소문

    • A = 65 ~ Z = 90

    • a = 97 ~ z = 122

  • 숫자

    • 0 = 48 ~ 9 = 57 > 숫자는 항상 0부터
  • 형식문자

    • \r(13) - 캐리지 리턴

    • \n(10) - 개행

    • \t(9)

    • 스페이스(32)

      • \n은 줄 바꿈할때 사용하는 문자다.

        콘솔 출력에서 새로운 줄로 이동하는데 사용

      • \r은 커서를 현재 라인의 처음으로 이동시키는 문자다

        주로 이전의 내용을 덮어쓸 때 사용


싱글톤 패턴

싱글톤 패턴은 클래스의 인스턴스가 단 하나만 생성되도록 하는 디자인 패턴

어떤 상황에서든 하나의 인스턴스만을 사용하고자 할 때 유용하다.

퀴즈 - 싱글톤 패턴의 코드

호출해서 return 할때마다 객체를 생성하는데, 이 객체를 한번만 생성해서 출력값이 50이 나오게하시오.

main메서드는 변경하지 않는다.

class SimpleNumber
{
    int num=0;
    private SimpleNumber snInst;
    
    private SimpleNumber() {}    // 생성자 private
    public void addNum(int n) { num += n; }
    public void showNum() 
    { 
        System.out.println(num); 
    }

    public static SimpleNumber getSimpleNumberInst()
    {
        return new SimpleNumber();
    }
}

class OnlyOneINstance
{
    public static void main(String[] args)
    {
        SimpleNumber num1 = SimpleNumber.getSimpleNumberInst();
        num1.addNum(20);

        SimpleNumber num2 = SimpleNumber.getSimpleNumberInst();
        num2.addNum(30);

        num1.showNum();
        num2.showNum();
    }
}

정답 - 내가 맞춤!!!!

class SimpleNumber
{
    int num=0;
    private static SimpleNumber snInst;

    private SimpleNumber() {}    // 생성자 private

    public void addNum(int n) { num += n; }
    public void showNum() 
    { 
        System.out.println(num); 
    }

    public static SimpleNumber getSimpleNumberInst()
    {
        if(snInst == null){
            snInst = new SimpleNumber(); //num1의 객체 주소값을 snInst로 넣는
        }
        return snInst;
    }
}

class OnlyOneINstance
{
    public static void main(String[] args)
    {
        SimpleNumber num1 = SimpleNumber.getSimpleNumberInst(); 
        //호출한곳에서 객체가 생성되서 num1이 그 주소값이 들어간다.
        num1.addNum(20);

        SimpleNumber num2 =SimpleNumber.getSimpleNumberInst(); 
        num2.addNum(30);

        num1.showNum();
        num2.showNum();
    }
}//num1,2를 new로 객체 생성한것이 아니라 주소값만 저장해서 하나의 객체를 참
  • 생성자를 private로 한 이유는 객체를 하나로 제한하기 위해서다.

  • 처음 snInst의 초기값은 null이므로, null일때 객체를 생성하고, null이 아니면 객체를 생성하지 않는if문장을 생성한다.

    • static메서드 안에서는 static변수만 참조하기 때문에 snInst변수를 static변수로 변경해줘서 동일한 값을 공유하는 변수로 만들어준다.

메모리로 그리면 이렇다.

어쨋든 객체를 하나로 제한하는것 > 위 코드보다 더 간단하게 코드 작성

class SimpleNumber
{
    int num=0;
    private static SimpleNumber snInst = new SimpleNumber();
    //이렇게 static변수에 객체 주소값을 넣으면, 객체의 개수를 하나로 제한하게 된다.

    private SimpleNumber() {}    // 생성자 private
    public void addNum(int n) { num += n; }
    public void showNum() 
    { 
        System.out.println(num); 
    }

    public static SimpleNumber getSimpleNumberInst()
    {

        return snInst;
    }
}
  • OnlyOneINstance 메서드는 같고
  • 처음 static변수 선언과 동시에 하나의 객체 주소값이 생성되고 그 주소값이 들어있는 곳에 num1, num2로 객체를 생성해 호출하면 결국 하나의 객체로 값들이 대입된다. 객체의 개수가 한개로 제한된다.

퀴즈1 - String api이용한

임의의 문자열을 입력받아 문자열의 갯수 세기

임의의 문자열 두개를 입력받아 두 문자열 합치기

임의의 문자열을 입력받아 문자열을 소문자로 바꾸기
임의의 문자열을 입력받아 문자열을 대문자로 바꾸기
임의의 문자열 5개를 입력받아 알파벳 순으로 정렬

import java.util.Scanner;

class StringTest
{
    public static void main(String[] args)
    {
        Scanner sc = new Scanner(System.in);
        String str1, str2, str3, str4, str5, str6;

        System.out.println("문자열을 입력하세요.");
        str1 = sc.nextLine();
        System.out.println("문자열을 입력하세요.");
        str2 = sc.nextLine();


        int num = str2.length();
        //length > 문장 길이 개수

        System.out.println("str2의 문자열의 길이는 " + num);
        System.out.println("str1과 str2의 문자열을 합친 결과는 " + str1.concat(str2));
        //concat > 연결

        System.out.println("문자열을 입력하시오.(소문자로 바꾸기)");
        str3 = sc.nextLine();
        System.out.println("문자열을 소문자로 바꾸면 " + str3.toLowerCase());
        //toLowerCase > 소문자로 변환

        System.out.println("문자열을 입력하시오.(대문자로 바꾸기)");
        str4 = sc.nextLine();
        System.out.println("문자열을 대문자로 바꾸면 " + str4.toUpperCase());        
        //toUpperCase > 대문자로 변환

        System.out.print("첫 번째 문장을 입력하세요 : "); //AAA (문자 비교하기)
        str5 = sc.nextLine();
        System.out.print("두 번째 문장을 입력하세요 : ");//BBB
        str6 = sc.nextLine();
        int num2 = str5.compareTo(str6); //str1 과 str2가 다르면 뺄셈이 일어난다.
        //compareTo > 비교
        System.out.print(num2);
    }
}
  • 문장 길이 개수 : 변수1.length()

  • 문장 연결 : 변수1.concat(변수 2)

  • 소문자로 변환 : 변수1.toLowerCase()

  • 대문자로 변환 : 변수1.toUpperCase()

  • 문장 비교 : 변수1.compareTo(변수2) > 처음 앞글자로 비교


퀴즈 1-5 알파벳 순으로 정렬

import java.util.Scanner;

class StringTest
{
	public static void main(String[] args)
	{
		Scanner sc = new Scanner(System.in);
		String str1, str2, str3, str4, str5, temp;
	
		System.out.println("첫번째 문자열을 입력하세요.");		
		str1 = sc.nextLine();
		System.out.println("두번째 문자열을 입력하세요.");		
		str2 = sc.nextLine();	
		System.out.println("세번째 문자열을 입력하세요.");		
		str3 = sc.nextLine();
		System.out.println("네번째 문자열을 입력하세요.");		
		str4 = sc.nextLine();	
		System.out.println("다섯번째 문자열을 입력하세요.");		
		str5 = sc.nextLine();	

		if(str1.compareTo(str2) > 0)
		{
			temp = str1;
			str1 = str2;
			str2 = temp;
		}
		if(str1.compareTo(str3) > 0)
		{
			temp = str1;
			str1 = str3;
			str3 = temp;
		}
		if(str1.compareTo(str4) > 0)
		{
			temp = str1;
			str1 = str4;
			str4 = temp;
		}
		if(str1.compareTo(str5) > 0)
		{
			temp = str1;
			str1 = str5;
			str5 = temp;
		}

		if(str2.compareTo(str3) > 0)
		{
			temp = str2;
			str2 = str3;
			str3 = temp;
		}
		if(str2.compareTo(str4) > 0)
		{
			temp = str2;
			str2 = str4;
			str4 = temp;
		}
		if(str2.compareTo(str5) > 0)
		{
			temp = str2;
			str2 = str5;
			str5 = temp;
		}

		if(str3.compareTo(str4) > 0)
		{
			temp = str3;
			str3 = str4;
			str4 = temp;
		}
		if(str3.compareTo(str5) > 0)
		{
			temp = str3;
			str3 = str5;
			str5 = temp;
		}

		if(str4.compareTo(str5) > 0)
		{
			temp = str4;
			str4 = str5;
			str5 = temp;
		}
		System.out.println(str1 + " " + str2 + " " + str3 + " " + str4 + " " + str5);
	}
}
  • selection sort해주는 것

    • 입력한 첫글자로 비교한다.

0개의 댓글