7장 배열 ①
목차 1차원 배열 객체들의 배열 명령-줄 인자 판매 기록 퀴즈 게임 역배열 정수 리스트에 추가, 제거하기. 쇼핑 카트 평균 구하기
판매 기록 평균 판매량 출력하기. 최소/최대 판매량 출력하기. 기존 판매원의 ID 0~4를 1~5로 수정하기. 기존 loop 활용하기. 예 : “Salesperson 3 had the highest sale the with $4500.” 기존 판매원의 ID 0~4를 1~5로 수정하기. 배열은 수정하지 말 것!! 사용자로부터 판매원의 수를 입력 받아 배열을 생성하도록 수정해보자.
판매기록 (Cont.) – Sales.java //******************************************************* // Sales.java // // 판매원 5명의 판매량을 입력받고 저장한다. import java.util.Scanner; public class Sales { public static void main(String[] args) final int SALESPEOPLE = 5; int[] sales = new int[SALESPEOPLE]; int sum; Scanner scan = new Scanner (System.in); for (int i = 0; i < sales.length; i++) System.out.print("Enter sales for salesperson " + i + ": "); sales[i] = scan.nextInt(); }
판매기록 (Cont.) – Sales.java System.out.println("\nSalesperson Sales"); System.out.println("--------------------"); sum = 0; for (int i = 0; i < sales.length; i++) { System.out.println("\t" + i + "\t" + sales[i]); sum += sales[i]; } System.out.println("\nTotal sales : " + sum);
퀴즈 게임 사용자로부터 퀴즈의 질문 수를 입력 받는다. 사용자로부터 정답을 입력 받아 배열에 저장한다. 퀴즈 게임을 시작한다. 정답은 정수형이고, 한 줄에 입력 받는다. 예(질문 수 10개인 퀴즈) : 34 7 13 100 81 3 9 10 321 12 퀴즈 게임을 시작한다. 사용자로부터 정답을 입력 받기 전 질문을 해야 한다. 사용자로부터 입력 받은 정답은 배열에 저장하지 않는다. 게임이 끝나면 맞춘 개수와 퍼센트를 출력한다. loop을 추가해 사용자가 원할 경우 게임을 계속 할 수 있도록 한다. Grade another quiz?(y/n)
역배열 배열을 만든다. 힌트! 역배열을 만든다. 바꾸어야 할 자리들의 값들을 swap한다. 사용자로부터 배열의 크기와 배열에 저장할 값을 입력 받는다. 배열을 출력한다. 역배열을 만든다. 기존 배열의 첫 번째 값이 역배열의 마지막 값이 되도록! 새로운 배열을 만들지 말고 기존 배열을 사용할 것! 역배열을 출력한다. 힌트! 바꾸어야 할 자리들의 값들을 swap한다.
정수 리스트에 추가, 제거하기. IntegerList에 메소드를 추가해보자 increaseSize()를 추가해보자. 현재 배열의 크기와 원소의 개수를 저장하는 instance 변수를 가진다. void addElement(int newVal)를 추가해보자. 리스트에 원소를 추가하기 전에 배열이 가득 차 있는지 검사해야 한다. (검사시 increaseSize()를 사용) void removeFirst(int newVal)를 추가해보자. 원소를 제거할 때 배열의 크기는 변하지 않는다. 현재 리스트의 첫 번째 원소를 제거한다. 남은 원소를 이동하여 빈 곳을 채워준다. element의 개수를 저장하는 변수의 값을 바꿔준다. removeAll(int newVal)를 추가해보자. 리스트의 모든 원소를 제거한다.
정수 리스트에 추가, 제거하기. (Cont.) - IntegerList.java //******************************************************* // IntergerList.java // // 정수 리스트에 element를 추가하고 제거하는 메소드를 // 가진다. public class IntegerList { int[] list; //--------------------------------------------------- // 주어진 사이즈로 리스트를 만든다. public IntegerList(int size) list = new int[size]; }
정수 리스트에 추가, 제거하기. (Cont.) - IntegerList.java //--------------------------------------------------- // 1~100 사이의 정수를 무작위로 선택하여 배열을 채운다. public void randomize() { for (int i = 0; i<list.length ; i++) list[i] = (int)(Math.random() * 100) + 1; } // 배열 원소와 인덱스를 출력한다. public void print() System.out.println(i + ":\t" + list[i]);
정수 리스트에 추가, 제거하기. (Cont.) - IntegerListTest.java //******************************************************* // IntegerListTest.java // IntegerList를 test. import java.util.Scanner; public class IntegerListTest { static IntegerList list = new IntegerList(10); static Scanner scan = new Scanner (System.in); //--------------------------------------------------- // 리스트를 생성, quit할 때까지 반복적으로 menu를 수행. public static void main(String[] args) printMenu(); int choice = scan.nextInt(); while (choice != 0) dispatch(choice); choice = scan.nextInt(); }
정수 리스트에 추가, 제거하기. (Cont.) - IntegerListTest.java //--------------------------------------------------- // menu에서 선택할 일을 수행. public static void dispatch(int choice) { int loc; switch (choice) case 0: System.out.println("Bye!"); break; case 1: System.out.println("How big should the list be?"); int size = scan.nextInt(); list = new IntegerList(size); list.randomize(); case 2: list.print(); default: System.out.println("Sorry, invalid choice"); }
정수 리스트에 추가, 제거하기. (Cont.) - IntegerListTest.java //--------------------------------------------------- // Menu - 사용자의 선택을 출력한다. public static void printMenu() { System.out.println("\n\tMenu "); System.out.println("\t===="); System.out.println("0: Quit"); System.out.println("1: Create a new list (** do this first!! **)"); System.out.println("2: Print the list"); System.out.print("\nEnter your choice : "); }
쇼핑 카트 ShoppingCart를 완성해보자. instance 변수 cart를 추가한다. cart는 item의 배열이다. 구성자에서 초기화해준다. increaseSize()를 추가한다. capacity를 3 증가 시킨다. addToCart()를 추가한다. item을 카트에 추가한다. totalPrice를 업데이트한다.
쇼핑 카트 (Cont.) 두 프로그램을 test할 프로그램을 작성하자. 사용자가 쇼핑을 원할 때까지 반복한다.(loop) loop을 돌 때마다 사용자로부터 item의 이름, 가격, 수량을 입력받는다. 카트에 item을 추가한 후, 카트의 내용물을 출력한다. loop을 한 번 수행한 후, 카트의 총 가격을 출력한다. - 예 : “Please pay…”
쇼핑 카트 (Cont.) -Item.java //******************************************************* // Item.java // // 쇼핑 카트 목록을 보여준다. import java.text.NumberFormat; public class Item { private String name; private double price; private int quantity; //--------------------------------------------------- // item을 생성한다. public Item(String itemName, double itemPrice, int numPurchased) name = itemName; price = itemPrice; quantity = numPurchased; }
쇼핑 카트 (Cont.) -Item.java //--------------------------------------------------- // item 정보를 반환한다. public String toString() { NumberFormat fmt = NumberFormat.getCurrencyInstance(); return (name + "\t" + fmt.format(price) + "\t" + quantity + "\t" + fmt.format(price*quantity)); } // item의 개당 가격을 반환한다. public double getPrice() return price;
쇼핑 카트 (Cont.) -Item.java //--------------------------------------------------- // item의 이름을 반환한다. public String getName() { return name; } // item의 수량을 반환한다. public int getQuantity() return quantity;
쇼핑 카트 (Cont.) -ShoppingCart.java //******************************************************* // ShoppingCart.java // item의 배열로 쇼핑 카트를 표현한다. import java.text.NumberFormat; public class ShoppingCart { private int itemCount; // 카트에 담긴 총 item 수 private double totalPrice; // 카트에 담긴 item의 총가격 private int capacity; // 현재 카트의 최대 수용량. //--------------------------------------------------- // 5개의 item을 담을 수 있는 쇼핑 카트를 생성한다. public ShoppingCart() capacity = 5; itemCount = 0; totalPrice = 0.0; } // 쇼핑 카트에 item을 추가한다. public void addToCart(String itemName, double price, int quantity)
쇼핑 카트 (Cont.) -ShoppingCart.java //--------------------------------------------------- // 모든 쇼핑 카트에 담긴 내용물의 정보를 반환한다. public String toString() { NumberFormat fmt = NumberFormat.getCurrencyInstance(); String contents = "\nShopping Cart\n"; contents += "\nItem\t\tUnit Price\tQuantity\tTotal\n"; for (int i = 0; i < itemCount ; i++ ) contents += cart[i].toString() + "\n"; contents += "\nTotal Price : " + fmt.format(totalPrice); contents += "\n"; return contents; } // 쇼핑카트에 담을 수 있는 item의 개수를 3개 늘린다. public void increaseSize()
평균 구하기 Average.java를 작성하자. Average.java를 수정해보자 명령 줄에서 받은 string을 출력한다. string이 없는 경우 “No arguments”를 출력한다. Average.java를 수정해보자 명령 줄에서 제공받는 정보는 정수이다. argument의 평균을 계산하여 출력한다. - parseInt() 사용.