7. ctrl-z가 입력될 때까지 키보드로부터 문자를 읽고 사용자가 입력한 문자열에서 단어를 분리하여 단어의 개수를 출력하는 프로그램을 작성하라. 단어는 공백으로 분리한다.(OpenChallenge의 힌트를 참고하라).
<소스코드> Chapter6_7.java
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Chapter6_7 {
public static void main(String[] args) {
// TODO Auto-generated method stub
InputStreamReader rd = new InputStreamReader(System.in);
int count=0;
char arr[]= new char[100];
try {
while(true) {
int c = rd.read(); // ctrl-z가 안먹혀서 Enter로 변경
if(c==13) // Enter 입력시 종료
break;
arr[count]=(char)c;
count++;
}
} catch(IOException e) {
System.out.println("입력 오류 발생");
}
String s = String.valueOf(arr); // char배열을 String으로 변환
StringTokenizer st = new StringTokenizer(s, " "); // Tokenizer를 이용해 분리
System.out.println(st.countTokens()); // Token 개수 출력
}
}
8. ctrl-z가 입력될 때까지 키보드로부터 문자를 읽고 사용자가 입력한 문자열에서 제일 긴 단어를 출력하는 프로그램을 작성하라. 단어는 공백으로 분리한다.
<소스코드> Chapter6_8.java
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Chapter6_8 {
public static void main(String[] args) {
// TODO Auto-generated method stub
InputStreamReader rd = new InputStreamReader(System.in);
int count=0;
String arr = "";
try {
while(true) {
int c = rd.read(); // ctrl-z가 안먹혀서 Enter로 변경
if(c==13) // Enter 입력시 종료
break;
arr = arr + String.valueOf((char)c); //문자 추가
count++;
}
} catch(IOException e) {
System.out.println("입력 오류 발생");
}
String str[] = arr.split(" "); // 공백 단위로 끊어서 배열에 저장
int max=str[0].length(); // 최대 문자 길이를 저장할 변수
int n = 0; //최대 길이 문자가 들어있는 배열의 인덱스
for(int i=0;i<str.length;i++) {
if(max<str[i].length()) {
max=str[i].length();
n=i;
}
}
System.out.println(str[n]);
}
}
9. 패키지 개념과 import의 사용을 복합적으로 묻는 문제이다. 2개의 패키지를 가진 자바 응용프로그램을 작성해보자. 패키지 lib에는 a.class가 있고 패키지 main에는 m.class가 있다. 클래스 a는 한 개의 메소드 sum(int x, int y)이 있으며 x, y의 합을 리턴한다. 클래스 m에는 main() 메소드가 있고 main()은 클래스 a의 인스턴스를 생성하고 sum(2, 3)을 호출한다. 결과로서 5를 화면에 출력한다. a.java와 m.java를 각각 작성하여 프로그램을 완성하라.
<소스코드>
lib/a.java
package lib;
public class a {
// Chapter6_9.java
public static void main(String[] args) {
// TODO Auto-generated method stub
}
public int sum(int x, int y){
return x + y;
}
}
main/m.java
package main;
import lib.a;
public class m {
// Chapter6_9.java
public static void main(String[] args) {
// TODO Auto-generated method stub
a a1 = new a();
System.out.println(a1.sum(2, 3));
}
}
10. 다음은 프로그램의 실행 방법과 결과를 보여준다. 동일하게 작동하도록 자바 프로그램을 완성하라.
<소스코드> Chapter6_10.java
import java.util.StringTokenizer;
//Chapter6_10
public class Query {
public static void main(String[] args) {
// TODO Auto-generated method stub
String query = args[0];
StringTokenizer st = new StringTokenizer(query, "&=");
int n = st.countTokens();
for(int i=0;i<n;i++){ // n의 자리에 st.countToken()을 바로 넣으면 for문이 덜 돈다.
System.out.print(st.nextToken()+"\t");
if(i%2!=0){
System.out.println();
}
}
}
}
11. Math.random()의 난수 발생기를 이용하여 사용자와 컴퓨터과 하는 가위바위보 게임을 만들어보자. 가위, 바위, 보는 각각 1, 2, 3 키이다. 사용자가 1, 2, 3 키 중 하나를 입력하면 동시에 프로그램도 난수 발생기를 이용하여 1, 2, 3 중에 한 수를 발생시킨다. 그리고 사용자와 컴퓨터 둘 중 누가 이겼는지를 판별하여 승자를 출력하라. 게임은 반복되도록 작성한다.
<소스코드> Chapter6_11.java
import java.awt.print.Printable;
import java.util.Scanner;
public class Chapter6_11 {
public static void main(String[] args) {
// TODO Auto-generated method stub
double d;
int comnum;
Scanner sd = new Scanner(System.in);
int usernum;
while(true){
System.out.print("가위(1), 바위(2), 보(3)를 입력하시오 : ");
usernum = sd.nextInt();
d = Math.random()*2;
comnum = (int)Math.round(d) + 1; // 1에서 3까지 랜덤 수 생성
System.out.println(comnum);
printrpc(comnum,usernum);
System.out.print("다시하시겠습니까(y/n) : ");
if(sd.next().charAt(0)=='y'){
continue;
} else if(sd.next().charAt(0)=='n'){
break;
} else{
}
}
}
static void printrpc(int com, int user){
if(com == user){
System.out.println("비겼습니다.");
} else {
if(com==3 && user==1){
System.out.println("이겼습니다.");
} else if(com==1 && user==3){
System.out.println("졌습니다.");
} else{
if(com>user){
System.out.println("졌습니다.");
}else{
System.out.println("이겼습니다.");
}
}
}
}
}
12. 겜블링 게임을 만들어보자 두 사람이 게임을 진행한다. 두 사람의 이름은 처음에 키보드를 통해서 입력받는다. 게임에 참여하는 사람은 Person 클래스로 작성하도록 하라. 각 사람이 번갈아 가면서 게임을 진행한다. 각 사람이 자기 차례에서 <Enter> 키를 입력하면 프로그램은 3개의 난수를 발생시키고 이 숫자가 모두 같은지 판단한다. 동일하다면 승자가 되며 게임을 끝낸다. 게임은 끝날 때까지 두 사람이 번갈아 가면서 진행한다. 숫자의 범위를 너무 크게 잡으면 3개의 숫자가 일치하게 나올 가능성이 적기 때문에 편리를 위해 숫자의 범위는 0~3까지로 한다.
<소스코드> Chapter6_12.java
import java.util.Scanner;
class Person{
private String player1;
private String player2;
Person(){
player1 = "1p";
player2 = "2p";
}
void setName(String p1, String p2){
player1 = p1;
player2 = p2;
}
String getPlayer1Name(){
return player1;
}
String getPlayer2Name(){
return player2;
}
}
public class Chapter6_12 {
public static void main(String[] args) {
// TODO Auto-generated method stub
double d1, d2, d3;
int num1, num2, num3;
Scanner sd = new Scanner(System.in);
System.out.print("1p 이름 입력 : ");
String player1 = sd.nextLine();
System.out.print("2p 이름 입력 : ");
String player2 = sd.nextLine();
Person person = new Person();
person.setName(player1,player2);
int i=0;
while(true){
if(i%2 == 0){
System.out.println(person.getPlayer1Name()+"님 차례");
} else {
System.out.println(person.getPlayer2Name()+"님 차례");
}
System.out.print("<<Enter입력>>");
if(sd.nextLine().equals("")){
d1 = Math.random()*2;
num1 = (int)Math.round(d1) + 1; // 1에서 3까지 랜덤 수 생성
d2 = Math.random()*2;
num2 = (int)Math.round(d2) + 1;
d3 = Math.random()*2;
num3 = (int)Math.round(d3) + 1;
System.out.print(num1+" "+num2+" "+num3);
System.out.println();
if(num1 == num2 && num2 == num3){
if(i%2 == 0){
System.out.println(person.getPlayer1Name()+"님 Win");
} else {
System.out.println(person.getPlayer1Name()+"님 Win");
}
break;
}
i++;
}
}
}
}
참고자료 : 생능출판 명품 JAVA Programming
github 주소 :
https://github.com/ch1517/Masterwork-JAVA-Programming/tree/master/Chapter6/Chapter6
'Programming Study > 명품자바프로그래밍' 카테고리의 다른 글
[명품자바프로그래밍] 7장 실습문제(1) (0) | 2018.09.26 |
---|---|
[명품자바프로그래밍] 6장 Open Challenge (0) | 2018.09.26 |
[명품자바프로그래밍] 6장 실습문제(1) (0) | 2018.09.20 |
[명품자바프로그래밍] 5장 실습문제(2) (2) | 2018.09.19 |
[명품자바프로그래밍] 5장 Open Challenge (0) | 2018.09.19 |
댓글