반응형

문제

명령을 실행하는 소프트웨어를 작성하라. 명령은 다음과 같이 mov, add, sub, jn0, prt로 구성되면 move sum 0는 sum 변수에 0을 삽입하고, add sum i는 sum 변수에 i 값을 더하면 sub n 1은 n 변수의 값을 1 감소시키고, jn0 n 3은 변수 n의 값이 0이 아니면 3 번째 명령(실제 4번째 줄)으로 돌아가도록 처리하고, prt sum 0은 sum 변수의 값을 출력하고 프로그램을 종료한다. prt에서 마지막 0은 특별한 의미가 없다. go는 지금까지 입력한 프로그램을 처음부터 실행하도록 하는 지시어이다.
참고로, 실행 예시에서 첫 번재 프로그램은 5에서 15까지 더하는 프로그램이다.

 

예시 답안

수퍼컴이 작동합니다. 프로그램을 입력해주세요. GO를 입력하면 작동합니다.
>> mov sum 0
>> mov i 5
>> mov n 10
>> add sum i
>> add i 1
>> sub n 1
>> jn0 n 3
>> prt sum 0
>> go
[ptr sum 0]
I:15 SUM:95 N:0
출력할 결과는 95. 프로그램 실행 끝
>> mov n 100
>> mov m 20
>> add n m
>> sub n 5
>> prt n 0
>> go
[prt n 0]
M:20 N:115
출력할 결과는 115. 프로그램 실행 끝
>>

 

소스 코드

(한번만 실행되게 만들었습니다.)

import java.util.*;

class ControlProgram{
	ArrayList<String> excution = new ArrayList<String>();
	ArrayList<String> temp = new ArrayList<String>();
	HashMap<String,Integer> var = new HashMap<String,Integer>();
	ArrayList<String> num = new ArrayList<String>();
	
	String [] alpha= {"a","b","c","d","e","f","g",
			"h","i","j","k","l","n","m","o",
			"p","q","r","s","t","u","v","w","x","y","z"};
	
	public ControlProgram() {
		Scanner s = new Scanner(System.in);
		System.out.println("수퍼컴이 작동합니다. 프로그램을 입력해주세요. GO를 입력하면 작동합니다.");
		
		while(true) {
			System.out.print(">> ");
			String temp1 = s.next();
			if(temp1.equals("go"))
				break;
			String temp2 = s.next();
			String temp3 = s.next();
			s.nextLine();
			excution.add(temp1);
			temp.add(temp2);
			num.add(temp3);
		}
		run();
		
		s.close();
	}
	private boolean Compare(String s) {
		for(int i = 0;i<alpha.length;i++)
		{
			if(s.contains(alpha[i]))
				return true;
		}
		return false;
	}
	
	private void run() {
		int count = 0;
		while(true) {
			switch(excution.get(count)) {
			case "mov":
				if(Compare(num.get(count))) // 알파벳 포함 여부 
					var.put(temp.get(count),var.get(num.get(count)));
				else // 알파벳이 아니라 정수형이면
					var.put(temp.get(count), Integer.parseInt(num.get(count)));
				count++;
				break;
			case "add":
				if(Compare(num.get(count))) // 알파벳 포함 여부 
					var.replace(temp.get(count), var.get(temp.get(count))+var.get(num.get(count)));
				else
					var.replace(temp.get(count), var.get(temp.get(count))+Integer.parseInt(num.get(count)));
				count++;
				break;
			case "sub":
				if(Compare(num.get(count))) // 알파벳 포함 여부 
					var.replace(temp.get(count), var.get(temp.get(count))-var.get(num.get(count)));
				else
					var.replace(temp.get(count), var.get(temp.get(count))-Integer.parseInt(num.get(count)));
				count++;
				break;
			case "jn0":
				int k;
				if(Compare(num.get(count)))
					k = var.get(num.get(count));
				else
					k = Integer.parseInt(num.get(count));
				if(var.get(temp.get(count)) != 0)
					count = k;
				else
					count++;
				break;
			case "prt":
				if(Compare(num.get(count)))
					System.out.println("[ptr "+ temp.get(count) +" "+ var.get(num.get(count)) +"]");
				else
					System.out.println("[ptr "+ temp.get(count) + " " + num.get(count) + "]");
				Set<String> keys = var.keySet();
				Iterator<String> it = keys.iterator();
				for(int i =0;i<var.size();i++)
				{
					String t = it.next();
					System.out.print(t.toUpperCase()+":"+var.get(t)+" ");
				}
				System.out.println();
				System.out.println("출력할 결과는 "+ var.get(temp.get(count))+". 프로그램 실행 끝");
				return;
			}
		}
	}
}

public class Main13 {
	public static void main(String[] args){
		new ControlProgram();
	}
}
반응형
반응형

문제

JLabel 컴포넌트는 Mouse 이벤트를 받을 수 있다. JLabel 컴포넌트에 마우스를 올리면 "LOVE JAVA"가, 내리면 "사랑해"가 출력되도록 스윙 응용프로그램을 작성하라.

 

소스 코드

import javax.swing.*;
import java.awt.event.*;
import java.awt.*;

public class Main1 extends JFrame{
	Main1(){
		setTitle("마우스 올리기 내리기");
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		
		Container c = getContentPane();
		
		c.setLayout(new FlowLayout());
		
		JLabel label = new JLabel("사랑해");
		
		label.addMouseListener(new MouseAdapter() {
			public void mouseEntered(MouseEvent e) {
				label.setText("Love Java");
			}
			public void mouseExited(MouseEvent e) {
				label.setText("사랑해");
			}
		});
		
		c.add(label);
				
		setSize(300,200);
		setVisible(true);
	}
	public static void main(String[] args) {
		new Main1();
	}

}

기본 화면 입니다.
마우스 올린 상태에서 윈도우 캡처한 화면입니다.

 

반응형
반응형

문제

다음과 같은 GUI 모양을 가진 스윙 프레임을 작성하라. Open Challenge의 힌트나 정답을 참고하라. 10개의 '*' 문자는 10개의 JLabel을 이용하여 랜덤한 위치에 출력하라.

 

소스코드

import javax.swing.*;
import java.awt.*;

public class Main8 extends JFrame{
	public Main8() {
		setTitle("여러 개의 패널을 가진 프레임");
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		
		Container c = getContentPane();
		
		c.setLayout(new BorderLayout());
		
		c.add(new NorthPanel(),BorderLayout.NORTH);
		c.add(new CenterPanel(),BorderLayout.CENTER);
		c.add(new SouthPanel(),BorderLayout.SOUTH);
		
		setSize(300,300);
		setVisible(true);
	}
	class NorthPanel extends Panel {
		public NorthPanel(){
		setBackground(Color.gray);
		JButton btn[] = new JButton[3];
		btn[0] = new JButton("열기");
		btn[1] = new JButton("닫기");
		btn[2] = new JButton("나가기");
		for(int i =0;i<3;i++)
			add(btn[i]);		
		}
	}
	class CenterPanel extends Panel {
		public CenterPanel() {
			setBackground(Color.white);
			setLayout(null);
			JLabel[] label = new JLabel[10];
			for(int i = 0;i<10;i++) {
				label[i] = new JLabel("*");
				label[i].setForeground(Color.red);
				label[i].setBackground(Color.white);
				int x = (int)(Math.random()*200)+10;
				int y = (int)(Math.random()*200)+10;
				label[i].setLocation(x, y);
				label[i].setSize(10,10);
				label[i].setOpaque(true);
				add(label[i]);
			}
		}
	}
	class SouthPanel extends Panel {
		public SouthPanel() {
			setBackground(Color.yellow);
			JButton btn = new JButton("Word Input");
			TextField tf = new TextField(20);
			add(btn);
			add(tf);
		}
	}
	public static void main(String[] args) {
		new Main8();
	}

}

반응형

+ Recent posts