반응형
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 |