본문 바로가기

JavaCode(review)

LinkedList 1. alphabetical order(알파벳 순으로 값추가) / 2. visit method - console 이용 case

반응형

LinkedList alpabetical order

package com.company;

import java.util.Iterator;
import java.util.LinkedList;
import java.util.ListIterator;

public class Demo {

    //linkedList 정의해보자   (ArrayList와 달리 add,remove위해 걍 point to만 바꾸면 됨.)

    public static void main(String[] args) {
        LinkedList<String> placesToVisit = new LinkedList<String>();        //정의
        addInOrder(placesToVisit,"Sydney");                    //method/ 값 추가
        addInOrder(placesToVisit,"Melbourne");
        addInOrder(placesToVisit, "Brisbane");
        addInOrder(placesToVisit, "Darwin");

        printList(placesToVisit);       //method

    }
                                                              //iterator 반복문 이용해서 출력
    private static void printList(LinkedList<String> linkedList){
        Iterator<String> i =linkedList.iterator();           //linkedList의 기능 iterator 설정
        while(i.hasNext()){                                    //hasNext :  다음데이터 존재 여부
            System.out.println("Now visiting "+i.next());    //next:현재요소 + i++; 기능
        }
        System.out.println("================");
    }

    // 알파벳순으로 추가 나열 method

    private static boolean addInOrder(LinkedList<String> linkedList, String newCity){
        ListIterator<String> stringListIterator= linkedList.listIterator();
                                                                    //양방향 ListIterator이용
        while(stringListIterator.hasNext()){
            int comparison = stringListIterator.next().compareTo(newCity);
                                            //compareTo 기능   : 기준값.compareTo(비교대상)
            if(comparison == 0){
                //기존값과 동일한 경우
                System.out.println(newCity+" is already included as a destination");
                return false;
            } else if(comparison > 0 ){
                                            //기존값이(b) 더 크다. 알파벳이 더 뒤쪽이다.//
                                            //newCity(a)가 순서 앞으로 옮겨야함.
                stringListIterator.previous();      //역방향 설정
                stringListIterator.add(newCity);
                return true;
            } else if(comparison < 0 ){             //기존값(a)이 알파벳 앞쪽 그대로 > 바꿀거 없음.
                // newCity(b) 새로 입력시 원래 뒤쪽으로 자동 저장이니.
            }
        }	//while문 끝
        
      stringListIterator.add(newCity);		//결론적으로 프린트 하고 싶은 값.
      return true;
    }
}


Output

D:\IT\JDK\jdk11.0.6_10\bin\java.exe "-javaagent:D:\IT\IDEA\IntelliJ IDEA Community Edition 2020.1\lib\idea_rt.jar=50932:D:\IT\IDEA\IntelliJ IDEA Community Edition 2020.1\bin" -Dfile.encoding=UTF-8 -classpath D:\IT\NewProject\LinkedList\out\production\LinkedList com.company.Demo
Now visiting Brisbane
Now visiting Darwin
Now visiting Melbourne				>알파벳 순으로 보여짐.
Now visiting Sydney
================

 

visit method 추가 - LinkedList console 이용 case

package com.company;

import java.util.Iterator;
import java.util.LinkedList;
import java.util.ListIterator;
import java.util.Scanner;

public class Demo {

    //linkedList 정의해보자   (ArrayList와 달리 add,remove위해 걍 point to만 바꾸면 됨.)

    public static void main(String[] args) {
        LinkedList<String> placesToVisit = new LinkedList<String>();        //정의
        addInOrder(placesToVisit,"Sydney");                    //method/ 값 추가
        addInOrder(placesToVisit,"Melbourne");
        addInOrder(placesToVisit, "Brisbane");
        addInOrder(placesToVisit, "Darwin");

        printList(placesToVisit);       //method

        addInOrder(placesToVisit, "Alice Springs");
        addInOrder(placesToVisit,"Darwin");

        printList(placesToVisit);

        visit(placesToVisit);       // index 0 인값부터 들어감.

    }
                                                              //iterator 반복문 이용해서 출력
    private static void printList(LinkedList<String> linkedList){
        Iterator<String> i =linkedList.iterator();           //linkedList의 기능 iterator 설정
        while(i.hasNext()){                                    //hasNext :  다음데이터 존재 여부
            System.out.println("Now visiting "+i.next());    //next:현재요소 + i++; 기능
        }
        System.out.println("================");
    }

    // 알파벳순으로 추가 및 저장하기 method (양방향)

    private static boolean addInOrder(LinkedList<String> linkedList, String newCity){
        ListIterator<String> stringListIterator= linkedList.listIterator();
                                                                    //양방향 ListIterator이용
        while(stringListIterator.hasNext()){
            int comparison = stringListIterator.next().compareTo(newCity);
                                            //compareTo 기능   : 기준값.compareTo(비교대상)
            if(comparison == 0){
                //기존값과 동일한 경우
                System.out.println(newCity+" is already included as a destination");
                return false;
            } else if(comparison > 0 ){
                                            //기존값(b) 알파벳이 더 뒤쪽이다. 양의정수//
                                            //newCity(a)가 순서 앞으로 옮겨야함.
                stringListIterator.previous();      //역방향 설정
                stringListIterator.add(newCity);
                return true;
            } else if(comparison < 0 ){             //기존값(a)이 알파벳 앞쪽 그대로 > 음의정수.
                // newCity(b) 새로 입력시 원래 뒤쪽으로 자동 저장이니.
            }
        }

        stringListIterator.add(newCity);            //프린트 값
        return true;
    }

    //visit method      //LinkedList 콘솔입력 / 양방향 / 무한루프 방지 goingForward이용.

    private static void visit(LinkedList cities){
        Scanner scanner = new Scanner(System.in);       //console 검색
        boolean quit = false;                       //boolean default = false
        boolean goingForward = true;                //need to test and set that direction
        ListIterator<String> listIterator = cities.listIterator();      //양방향

        if(cities.isEmpty()){
            System.out.println("No cities in the itinerary");
            return;
        }else{
            System.out.println("Now visiting " + listIterator.next());
            printMenu();
        }

        //printMenu 후 console 입력시 case들

       while(!quit){           //!quit >   quit = false 일때란 뜻
            int action = scanner.nextInt();     //consle 입력
            scanner.nextLine();
            switch (action){
                case 0 :                    // to quit
                    System.out.println("vacation over");
                    quit = true;
                    break;
                case 1:             // go to next city
                    if(!goingForward){                      //방향 확실히 설정> 방향오류방지
                        if(listIterator.hasNext()){
                            listIterator.next();
                        }
                        goingForward = true;
                    }
                    if(listIterator.hasNext()){
                        System.out.println("Now visiting " +listIterator.next());
                    }else{
                        System.out.println("no more, End");
                    }
                    break;
                case 2:         // go to previous city
                    if(goingForward){                       //방향 오류 방지
                        if(listIterator.hasPrevious()){
                            listIterator.previous();
                        }
                        goingForward = false;
                    }
                    if(listIterator.hasPrevious()){
                        System.out.println("Now visiting "+listIterator.previous());
                    }else{
                        System.out.println("no previous city, we are at start point");
                    }
                    break;
                case 3:         //print menu
                    printMenu();
                    break;
            }
        }

    }

    private static void printMenu(){
        System.out.println("press action:\n");
        System.out.println("0 - to quit\n"+"1 - go to next city\n"+
                "2- go to previous city\n"+"3 - print menu ");
    }
}


Output

D:\IT\JDK\jdk11.0.6_10\bin\java.exe "-javaagent:D:\IT\IDEA\IntelliJ IDEA Community Edition 2020.1\lib\idea_rt.jar=50901:D:\IT\IDEA\IntelliJ IDEA Community Edition 2020.1\bin" -Dfile.encoding=UTF-8 -classpath D:\IT\NewProject\LinkedList\out\production\LinkedList com.company.Demo
Now visiting Brisbane
Now visiting Darwin
Now visiting Melbourne
Now visiting Sydney
================
Darwin is already included as a destination
Now visiting Alice Springs
Now visiting Brisbane
Now visiting Darwin
Now visiting Melbourne
Now visiting Sydney
================
Now visiting Alice Springs				//visit(placesToVisit);  출력값
press action:

0 - to quit
1 - go to next city
2- go to previous city
3 - print menu 
1
Now visiting Brisbane
1
Now visiting Darwin
2
Now visiting Brisbane
2
Now visiting Alice Springs
2
no previous city, we are at start point
1
Now visiting Brisbane
1
Now visiting Darwin
1
Now visiting Melbourne
1
Now visiting Sydney
1
no more, End
2
Now visiting Melbourne
0
vacation over

Process finished with exit code 0

'JavaCode(review)' 카테고리의 다른 글

Interface Challenge  (0) 2020.06.16
Playlist Coding / LinkedList Challenge / toString 이용  (0) 2020.06.14
LinkedList 개념코딩  (0) 2020.06.11
Bank Application - Autoboxing & Unboxing Challenge  (0) 2020.06.03
mobilePhone contact code.  (0) 2020.05.30