Toggle menu
Toggle personal menu
Not logged in
Your IP address will be publicly visible if you make any edits.

한자공/시즌3/20140807

From ZeroWiki
Revision as of 09:56, 7 August 2014 by imported>healu1423

Describe 한자공/시즌3/20140807 here

일시

8월 7일 인강

참가자

유재범 참석
이지수 참석
김용준 참석
김정민 참석

진행 상황

  • 파일 입출력 정리

발표 내용

  • 핵심 : 파일 입출력 스트림
    • 문자

다음 진행

과제

  • 계산기 gui 만들기
    • 필요하다면 아래 있는 Base를 이용해서 만들 것.
  • Base
import java.util.Scanner;

public class base {
	public static void main(String [] args){
		Scanner scan = new Scanner(System.in);
		String input;
		
		System.out.println("x ? y or exit");
		while( true )
		{
			System.out.print("Calculate : "); 
			input = scan.nextLine();
			if(input.equals("exit")) break;
			Calculation(input);
		}		
		scan.close();
	}
	
	static void Calculation(String input){
		int x = 0, y = 0;
		String[] tmp = input.split(" ");

		try {
			x = Integer.parseInt(tmp[0]);
			y = Integer.parseInt(tmp[2]);
		} 
		catch (NumberFormatException e) {
			System.out.println("Insert only a number!");
			return;
		} catch (ArrayIndexOutOfBoundsException e) {
			System.out.println("Insert only this form!(x ? y)");
			return;
		} 
		
		switch(tmp[1])
		{
			case "+": System.out.println(x+y); break;
			case "-": System.out.println(x-y); break;
			case "*": System.out.println(x*y); break;
			case "/":
				try{
					System.out.println(x/y);
				} catch (ArithmeticException e){
					System.out.println("Don't divide by 0!");
					return;
				}
				break;
		}
	}
}

유재범

이지수

김용준

package Calculator_140728;

import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.GridLayout;
import java.awt.Insets;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
import Calculator_140728.base;


public class gui_v1 {
	public static void main( String [] args){
		 new Calculator("계산기");
	}
}


class Calculator extends JFrame{
	String[] strOpt = { "/", "*", "-", "+", "C", "="};
	String strFm = ""; //수식라벨을 위한 스트링
	String strTf = ""; //텍스트 필드를 위한 스트링
	String strCal = ""; //계산을 위한 스트링
	String result = "0"; //결과값을 위한 스트링
	
	//=을 위한 변수
	Boolean countE = false;// 연속 = 기능 비활성화
	int tmpE; 
	String strE;
	//연속 연산을 위한 변수
	Boolean countO = false;// 연속 연산 기능 비활성화
	Boolean countP = false;// 연산자 변경
	String tmpO;//이전 입력받은 수

	
	JButton[] num = new JButton[10];
	JButton[] opt = new JButton[strOpt.length];

	JLabel fm = new JLabel(); //현재 계산식 보는 라벨
	JTextField tf = new JTextField("0");//숫자와 연산
	
	JPanel see = new JPanel();
	JPanel input_num = new JPanel();
	JPanel input_opt = new JPanel();
	
	private void compose() {
		Container container = this.getContentPane();
		
		container.setLayout(new BorderLayout(4,7));

		//연산자
		input_opt.setLayout(new GridLayout(4,1,10,10));
		for(int i = 0; i < opt.length; i++)
		{
			opt[i] = new JButton(strOpt[i]);
			opt[i].setFont(new Font("굴림", Font.BOLD, 15));
			if(i < 4) input_opt.add(opt[i]);
		}
		container.add("East",input_opt);
		
		//라벨과 텍스트박스
		see.setLayout(new GridLayout(2,1,0,2));
		see.add(fm);
		see.add(tf);
		fm.setFont(new Font("굴림", 0, 12));
		tf.setFont(new Font("굴림", Font.BOLD, 21));
		container.add("North",see);
		
		//숫자 부분
		input_num.setLayout(new GridLayout(4,3,3,10));
		for(int i = 0 ; i <= 9 ; i++)
		{
			num[i] = new JButton(Integer.toString(i));
			num[i].setFont(new Font("굴림", Font.BOLD, 19));
		}
		for(int i = 2 ; i >= 0 ; i--)
			for(int j = 1 ; j <= 3 ; j++) input_num.add(num[3*i+j]);
		input_num.add(num[0]);
		input_num.add(opt[4]);
		input_num.add(opt[5]);
		container.add("Center",input_num);
		
	}
	
	public Insets getInsets()
	{//여백을 주기 위한 메소드 오보라이딩
		Insets i = new Insets(30,15,15,15);
		return i;
	}
	
	private void setevent() {
		for(JButton e : num) e.addActionListener(new MyAction());
		for(JButton e : opt) e.addActionListener(new MyAction());
	}
	
	
	class MyAction implements ActionListener{

		@Override
		public void actionPerformed(ActionEvent e) {
			Object who = e.getSource();
			
			for(int i = 0; i < num.length; i++){
				if(who == num[i]){
					strTf += i;
					tf.setText(strTf);
					countE = false;// 연속 = 기능 비활성화
					countP = false;// 연산자 변경 비활성화
				}
			}
			
			for(int i = 0; i< opt.length; i++)
				if(who == opt[i]) operation(i);
			
		}
		private void operation(int nowOpt){
			switch(nowOpt)
			{
			default: // 연산자들 기능 구현
				if (tf.getText().equals("0"))
				{// 초기 0값
					strFm = "0 "+strOpt[nowOpt]+" ";
					fm.setText(strFm);
				} 
				else if(tf.getText().equals(result) && countP)
				{// 이전 값과 같을 때 연산자 변경
							try{
							strFm = fm.getText().substring(0, fm.getText().length()-2) + strOpt[nowOpt]+ " ";
							} catch (StringIndexOutOfBoundsException e) 
							{// =을 한 후 연산 결과에서 다시 연산할 때
								strFm = tf.getText() + " " + strOpt[nowOpt] + " ";
								strTf = "";
							}
							fm.setText(strFm);
				}
				else 
				{// 연산
					tmpO = tf.getText();
					if(countO){// 연속 연산 
						strCal = result + strFm.substring(strFm.length()-3,strFm.length()) + tf.getText();
						result = base.Calculation(strCal);
						tf.setText(result);
						countP = true;
					}
					else {// 첫 연산
						countO = true;// 연속 연산 기능 활성화
						result = tf.getText();
					}
					strFm += tmpO + " " + strOpt[nowOpt] + " ";
					
					fm.setText(strFm);
					strTf = "";//처음 버튼 입력을 받기 위한 텍스트 필드 초기화
				}	
				break;
				
			
			case 4: // C 기능 구현
				strFm = "";
				strTf = "";
				result = "0";
				countE = false;// 연속 = 기능 비활성화
				countO = false;// 연속 연산 기능 비활성화
				countP = false;// 연산자 변경 비활성화
				fm.setText(strFm);
				tf.setText("0");
				break;
				
				
			case 5:// = 기능 구현
				if(countE){// 연속 = 기능
					strCal = result + strE + tmpE;
					result = base.Calculation(strCal);
				} else {// 일반 = 기능
					try{
					tmpE = Integer.parseInt(tf.getText());//마지막 연산한 숫자
					strE = strFm.substring(strFm.length()-3,strFm.length());//마지막 연산자
					
					if(strFm.length() == 4) strCal = strFm + tf.getText();// 단순 수식 인 경우
					else strCal = result + strFm.substring(strFm.length()-3,strFm.length()) + tmpE;//복합 수식인경우
					
					result = base.Calculation(strCal);
					
					countE = true;// 연속 = 기능 활성화 
					countO = false;// 연속 연산  기능 비활성화
					countP = false;// 연산자 변경 비활성화
					
					} catch (StringIndexOutOfBoundsException e) 
					{//아무런 연산하지 않고 숫자 = 했을때 예외처리
						result = tf.getText();
						strTf = "";
					}
				}
				strFm = "";//수식라벨 리셋
				
				fm.setText(strFm);
				tf.setText(result);
		}
		
	}
		
		
	}
	public Calculator (String title){
		super.setVisible(true);
		super.setTitle(title);
		super.setSize(218,313);
		super.setResizable(false);
		
		//화면 중앙 배치
		Dimension d = super.getToolkit().getScreenSize();
		super.setLocation(d.width/2 - super.getWidth()/2, d.height/2 - super.getHeight()/2);
		
		//종료
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		
		this.compose();
		this.setevent();
	}
}

김정민

//다들 열심히 하는 모습이 보기 좋네요 굳굳
//네?

후기

  • 이상한 과제에 고통 받는 동기들의 원한이 들리지 않느냐!!!
  • 하드 트롤링 - 유재범
  • 물론 안하셔도 됩니다. - 김용준
    • AWT 컴포넌트 설명 했는데 그것도 정리해서 올려줘 - 유재범

한자공/시즌3