728x90

 

 


정리할거

borderLayout, gridLayout, 레이아웃 관련 정리하기

밑에 catch부분 설명 -필요


url따오고
길 만들고

데이터를 한줄씩 읽어와서 line에 넣어야 하니까
페이지 소스를 전부다 돌기 위해서 반복문 사용
페이지 소스를 한줄씩 읽어오는데 더이상 읽고 line에 복사할게 없으면 null이면 -1을 출력해서 반복문 벗어나기

단어를 가져오는데 소문자, 대문자 가 있으니까 
toLowerCase()를 통해 다 소문자로 통일해서 저장한다.
indexOf()는 찾는 글자가 더이상 없으면 -1을 리턴한다.
이걸 이용

나머지 설명은 indexOf() 글 찾으면 있음


이렇게해서 페이지안에 내가 원하는 문자가 몇개있는지 뽑아올 수 있다.

채팅창

 

입력창과 보내기버튼을 아직수정 안했다
프레임창크기 변경에 따라 버튼은 그대로있고 
입력창은 변하게 만들어야 한다.

 
밑에 패널 부분만 레이아웃을 설정해주면된다.
BorderLayout()사용

이러면 윈도우창은 완성
 
임의의 메소드를 하나더 만든다.
(ChatClient는 접어놨다)
자동으로 팝업창이 실행된다.
다르게 입력해봤다

서버ip값을 강제로 입력해놨다
코드를 추가하고
윗사진 처럼 ip를 지나
닉네임을 입력할 수 있게 nickName을 만든다.
소켓을 만들기 위해 필드를 더 추가한다.

1번사진 소켓은 내 IP주소






2번사진은 내 IP주소가 아니라 다른 IP를 넣어준거

 

데이터가 오가는 그림 설명

오류는 try catch로 잡았다.

catch부분 설명 -
서버에 닉네임을 보내준다.
채팅은 순서상관없이 너나 나나 다같이 보낼수 있어야 한다.
그러면 스레드르 사용해야 한다,

그리고 보내기 버튼도 활성해야한다.
ActionListener, Runnable를 implement하고
스레드를 생성하자

스레드랑 이벤트는  service() 메소드에 생성했다.
 
 
if문의 내용이 내가 입력칸에 quit를 치면 
actionPerformed를통해 화면에 어찌어찌 출력하게 되는데
사진에 있는 부분이 그걸 읽어들이면
종료를 해버린다.

글이 나와도 스크롤이 안따라다닌다.
저 코드를 넣으면 스크롤이 자동으로 내려간다.
원래는 x버튼 누르면 서버에 에러가 나는데
빨간 부분을 작성하면 x를 누르고 나가도 에러대신 저 문구를 출력하고 나간다.


서버만들기

서버는 스레드가 될수 없고 io가 스레드가 되어야 한다.
여기서는 ChatServer는 서버가 되고 CHatHandler가 스레드가 되어야 한다.

ServerSocket 생성

 

 
 
스레드 생성

필드에 보면 소켓을 잡았는데
이렇게하면 클라이언트 하나씩 소켓을 만들어 줄수 없다.
소켓은 ChatServer()안에 넣어서
개별로 만들어줘야 한다.
완성본

핸들러

 
스레드 부분 만들고
broadcast 부분 따로 만들기????"?????
채팅입력부분
나간사람한테는 quit를 보내고
남은 사람한테는 oo님이 나갔습니다를 보내야 한다.
일단 exit가 아니라 break를 걸어 while문을 벗어나게 만든다.
quit를 입력하고 나간사람에게는 quit를 보내고

그외에 사람들에게는 다른 메세지 보내기

list에 클라이언트들이 배열로 저장되어 있으니까
한명 제거하기
 
728x90

'JAVA' 카테고리의 다른 글

10/26 수업내용 (DB)  (0) 2020.10.26
Frame - BorderLayout(), FlowLayout(), GridLayout()  (0) 2020.10.23
10/22 수업내용  (0) 2020.10.22
그림판  (0) 2020.10.20
10/19 수업  (0) 2020.10.19
728x90
문제
더하기 연습 프로그램
10~99 사이의 난수를 2개(a, b) 발생하여 합을 구하는 프로그램
문제수는 총 5문제를 제공한다 - for
1문제당 점수 20점씩 계산

[실행결과]
[1] 25 + 36 = 45
틀렸다

[2] 78 + 10 = 88
딩동뎅
...

[5] 12 + 25 = 37
딩동뎅

당신의 총 x문제를 맞추어서 xx점 입니다
package loop;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class AddGame {
	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		int user, com1, com2, sum, count = 0, result = 0;

		for (;;) {//for1
			for (int i = 1; i <= 5; i++) {//for2
				com1 = (int) (Math.random() * 89) + 10;
				com2 = (int) (Math.random() * 89) + 10;

				System.out.print("[" + i + "] " + com1 + " + " + com2 + " = ");
				user = Integer.parseInt(br.readLine());
				result = com1 + com2;

				if (result == user) {
					System.out.println("딩동댕");
					count++;
				} else {
					System.out.println("틀렸다. 답 : " + result);
				}
			} // for2
			sum = count * 20;
			System.out.println("당신은 총" + count + "문제를 맞춰서 " + sum + "점 입니다.");
			
			String user1;
			while (true) {//while
				System.out.println("continue Y/N : ");
				user1 = br.readLine();

				if (user1.equals("n") || user1.equals("N") || user1.equals("y") || user1.equals("Y"))
					break; // 저 4개의 문자를 받으면 while문을 break해서 나가기 

			} // while
			//나갔는데 아래처럼 n이 아니면 break를 하지 안고 다시 for2로 올라감
			if (user1.equals("n") || user1.equals("N"))
				
			break;	
		}//for1
		System.out.println("프로그램 종료");
	}

}

 난수 2개를 생성하고 값을 저장해야하니까 com1, com2를 만든다.
전체를 무한반복하는 for문을 만들고 그안에
for문을 사용해 5번 반복시키고 
그안에 if문으로 정답, 오답을 출력하는 코드를 만든다.
for문 밖에다가 continue를 물어보는 코드를 만들고
y를 입력시 다시 for2로 올라가게 만들고
n을 입력시 끝내게 만든다.

break는 멈추기보다는 { }안을 벗어나는 의미

for1을 while(true)로 바꿔도 된다.

728x90

'JAVA' 카테고리의 다른 글

배열, 2차원 배열 정리  (0) 2020.09.12
for 연습05  (0) 2020.09.09
숙제-NumberGame(bufferedReader, while, if )  (0) 2020.09.09
switch 연습02  (0) 2020.09.08
if문 연습04 (가위, 바위, 보 게임)  (0) 2020.09.08
728x90
문제
숫자맞추기 게임
1~100사이의 난수를 발생하여 맞추는 게임

[실행결과]
숫자 입력 : 50
50보다 큽니다

숫자 입력 : 90
90보다 작습니다

...

숫자 입력 : 87
딩동뎅 xx번만에 맞추셨습니다

continue(Y/N) : n
프로그램을 종료합니다

내가한 방법

처음에는 사진처럼 continmue를 만들때 반복문을 전체를 싸지 않고 else안에 생성해서 오류

두번째는 아래 사진처럼 30번줄에 break를 하지않아 반복문을 빠져나오지못해서 33번 문장으로 갈수 없어서 Unreachable code  오류가 나왔다.

그래서 고친 코드는 아래처럼

package loop;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class NumberGame {
	public static void main(String[] args) throws IOException {

		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		int num, user, count = 0;
		String choice;

		System.out.println("숫자맞추기");
		num = (int) (Math.random() * 100) + 1;// 난수생성
		for (;;) {
			while (true) {//
				count++;
				System.out.print("숫자입력 : ");
				user = Integer.parseInt(br.readLine());

				if (user > num) {
					System.out.println(user + "보다 작습니다.");
					System.out.println();
				} else if (user < num) {
					System.out.println(user + "보다 큽니다");
					System.out.println();
				} else {
					System.out.println("딩동댕 " + count + "번만에 맞추셨습니다.");
					break;
				}
			} // while
			System.out.print("continue(Y/N) : ");
			choice = br.readLine();
			if (choice.equals("n")||choice.equals("N"))
				break;
		} // for
		System.out.println("프로그램 종료");
	}
}

선생님 방법

나는 "딩동댕 맞췄습니다"를 while안에 넣었는데 선생님은 while문 밖에다 만들었다.

package loop;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class NumberGame02 {
	public static void main(String[] args) throws IOException {
		int user, num, count=0;
		String choice, yn;

		
		for(;;) {//무한반복
		 num = (int) (Math.random() * 100) + 1;// 난수생성
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

		System.out.println("숫자맞추기");

		while (true) {//
			System.out.print("숫자입력 : ");
			user = Integer.parseInt(br.readLine());
			count++;

			if (user > num) {
				System.out.println(user + "보다 작습니다.");
			} else if (user < num) {
				System.out.println(user + "보다 큽니다");
			} else {
				break;
			}
		}//while문 끝
		
		System.out.println("딩동댕 " + count + "만에 맞추셨습니다.");
		System.out.println("=========");
		
		System.out.println("continue Y/N : ");
		yn = br.readLine();
		if(yn.equals("n")||yn.equals("N")) {
			break; //for문을 나가는거
		}
	}//for
		System.out.println("프로그램 종료");
	}
}

 


a여기에 한술 더해서 continue에 y나 n이 아닌 다른 코드를 넣으면 계속 물어보는 코드를 추가했다.

package loop;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class NumberTest02_1 {
	public static void main(String[] args) throws IOException {
		int user, num, count = 0;
		String choice, yn;

		for (;;) {// 무한반복
			num = (int) (Math.random() * 100) + 1;// 난수생성
			BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

			System.out.println("숫자맞추기");

			while (true) {//
				System.out.print("숫자입력 : ");
				user = Integer.parseInt(br.readLine());
				count++;

				if (user > num) {
					System.out.println(user + "보다 작습니다.");
				} else if (user < num) {
					System.out.println(user + "보다 큽니다");
				} else {
					break;
				}
			} // while문 끝

			System.out.println("딩동댕 " + count + "만에 맞추셨습니다.");
			System.out.println("=========");

			while (true) {
				System.out.println("continue Y/N : ");
				yn = br.readLine();
				
				if (yn.equals("n") || yn.equals("N") || yn.equals("y") || yn.equals("Y"))
					break; // for문을 나가는거
				
			} // while
			if (yn.equals("n") || yn.equals("N"))
			break;

		} // for
		System.out.println("프로그램 종료");
	}

}

 

728x90

'JAVA' 카테고리의 다른 글

for 연습05  (0) 2020.09.09
숙제-더하기 연습 프로그램(for, 중첩for, while, bufferedReader,  (0) 2020.09.09
switch 연습02  (0) 2020.09.08
if문 연습04 (가위, 바위, 보 게임)  (0) 2020.09.08
for문 연습03  (0) 2020.09.08
728x90
 월급 계산 프로그램
이름, 직급, 기본급, 수당을 입력하여 세금과 월급을 계산하시오
세율은 급여가 4,000,000 만원 이상이면 3% 아니면 2%로 한다

만약 이 문제를 다 풀었다면
세금은 calcTax()
월급은 calcSalary()를 이용해서 계산하시오

급여 = 기본급 + 수당
세금 = 급여 * 세율
월급 = 급여 - 세금

[실행결과]
이름 입력 : 홍길동
직급 입력 : 부장
기본급 입력 : 4500000
수당 입력 : 200000

   *** 홍길동 월급 명세서 ***
직급 : 부장
기본급      수당      급여   세율   세금   월급
4500000      200000     4700000   3%   xxxxx   xxxxxxx
package method;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
//기본급(basePay), 수당(allowance), 급여(wage), 세율(taxRate), 세금(tax), 월급(salary)

public class Salary {
	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		
		String name, grade; 
		int wage=0 ,salary=0, basePay=0, allowance=0, tax=0; 
		double taxRate =0;
		
		System.out.print("이름 입력 : ");
		name = br.readLine();
		System.out.print("직급 입력 : ");
		grade = br.readLine();
		System.out.print("기본급 입력 : ");
		basePay = Integer.parseInt(br.readLine());
		System.out.print("수당 입력 : ");
		allowance = Integer.parseInt(br.readLine());
		
		wage = basePay + allowance;
		taxRate = wage >= 4000000 ? 0.03 : 0.02;
		tax = (int) (wage*taxRate);
		salary = wage - tax;
		
		
		System.out.println("\t*** "+name+"월급 명세서 ***");
		System.out.println("직급 : "+grade);
		System.out.println("기본급\t수당\t급여\t세율\t세금\t월급");
		System.out.println(basePay+"\t"
						+allowance+"\t"
						+wage+"\t"
						+(int)(taxRate*100)+"%\t"
						+tax+"\t"
						+salary);
		
	}

}

메소드를 이용한 방법

package method;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Salary02 {

	public int calcTax(int a, double b) {
		return (int) (a * b);
	}

	public int calcSalary(int a, int b) {
		return a - b;
	}

	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		Salary02 salary02 = new Salary02();

		String name, grade;
		int wage = 0, salary = 0, basePay = 0, allowance = 0, tax = 0;
		double taxRate = 0;

		System.out.print("이름 입력 : ");
		name = br.readLine();
		System.out.print("직급 입력 : ");
		grade = br.readLine();
		System.out.print("기본급 입력 : ");
		basePay = Integer.parseInt(br.readLine());
		System.out.print("수당 입력 : ");
		allowance = Integer.parseInt(br.readLine());

		wage = basePay + allowance;
		taxRate = wage >= 4000000 ? 0.03 : 0.02;
		tax = salary02.calcTax(wage, taxRate);
		salary = salary02.calcSalary(wage, tax);

		System.out.println("\t*** " + name + "월급 명세서 ***");
		System.out.println("직급 : " + grade);
		System.out.println("기본급\t수당\t급여\t세율\t세금\t월급");
		System.out.println(basePay + "\t" 
						+ allowance + "\t" 
						+ wage + "\t" 
						+ String.format("%.0f", taxRate * 100) + "%\t" 	
						+ tax + "\t" 
						+ salary);

	}
}
728x90
728x90

사칙연산하기

package switch_Ex;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.text.DecimalFormat;

public class SwitchTeat02_1 {
	public static void main(String[] args) throws IOException{
		DecimalFormat df = new DecimalFormat("#.###");
		
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		int a, b;
		String op;
		
		System.out.println("2개의 정수형 숫자와 연산자(+,-,*,/)를 입력하여 계산하시오");
		System.out.print("a 입력 : ");
		a = Integer.parseInt(br.readLine());
		System.out.print("b 입력 : ");
		b = Integer.parseInt(br.readLine());
		System.out.print("연산자(+,-,*,/) 입력 : ");
		op = br.readLine();
		
		double result =0;
		switch(op) {
		case "+" : result = a + b; break;
		case "-" : result = a - b; break;
		case "*" : result = a * b; break;
		case "/" : result = (double)a / b; break;
		default : System.out.println("연산자 error");
		  		  System.exit(0);//문장을 그냥 끝내는 코드
		 
		}
		System.out.println(a+op+b+" = "+df.format(result));
		
	}

}
2개의 정수형 숫자와 연산자(+,-,*,/)를 입력하여 계산하시오
a 입력 : 5
b 입력 : 6
연산자(+,-,*,/) 입력 : +
5+6 = 11

다른방법

package switch_Ex;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class SwitchTest02 {
	public static void main(String[] args) throws IOException{
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		int a, b, result;
		String op;
		
		System.out.println("2개의 정수형 숫자와 연산자(+,-,*,/)를 입력하여 계산하시오");
		System.out.print("a 입력 : ");
		a = Integer.parseInt(br.readLine());
		System.out.print("b 입력 : ");
		b = Integer.parseInt(br.readLine());
		System.out.print("연산자(+,-,*,/) 입력 : ");
		op = br.readLine();
		
		
		switch(op) {
		case "+" : System.out.println(a+" + "+b+" = "+(a+b));
					break;
		case "-" : System.out.println(a+" - "+b+" = "+(a-b));
					break;
		case "*" : System.out.println(a+" * "+b+" = "+(a*b));
					break;
		case "/" : System.out.println(a+" / "+b+" = "+String.format("%.3f", ((double)a/b)));
					break;
		default : System.out.println("연산자 error");
		}
		
	}

}

 

728x90

+ Recent posts