본문 바로가기

JAVA/공부

7. 제네릭과 컬렉션

13. 명령을 실행하는 소프트웨어를 작성하라. 명령은 다음과 같이 mov, add , sub, jn0, prt로 구성되며 mov 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까지 더하는 프로그램이다.

 

어려웠다

 

import java.util.HashMap;
import java.util.InputMismatchException;
import java.util.Scanner;
import java.util.Set;
import java.util.Vector;

import java.util.Iterator;
class Supercom{
	private HashMap<String,Integer> h=new HashMap<String,Integer>();
	private Vector<String> v=new Vector<String>();
	private Scanner sc=new Scanner(System.in);
	private void clear() {
		v.removeAllElements();
		h.clear();
	}
	private void start() {
		while(true) {
			Scanner sc=new Scanner(System.in);
			System.out.print(">>");
			String line=sc.nextLine();
			if(line.toUpperCase().equals("GO"))
				break;
			v.add(line);
		}
	}
	private void cal() {
		for(int i=0;i<v.size();i++) {
			try{sc=new Scanner(v.get(i));
			String order=sc.next();
			String obj=sc.next();
			int value=sc.nextInt();
			switch(order) {
			case "mov":mov(obj,value);break;
			case "add":add(obj,value);break;
			case "sub":sub(obj,value);break;
			case "jn0":if((h.get(obj))!=0)
					i=value-1;
					break;
			case "prt":prt(obj,i);
			}}catch(InputMismatchException e) {
				sc=new Scanner(v.get(i));
				String order=sc.next();
				String obj=sc.next();
				String value=sc.next();
				switch(order) {
				case "mov":mov(obj,value);break;
				case "add":add(obj,value);break;
				case "sub":sub(obj,value);break;
				case "jn0":if((h.get(obj))!=0)
						i=jn0(obj,value);
						break;
				case "prt":prt(obj,i);}
		}}
	}
	private <T>int jn0(String s,T i) {return h.get(s);}
	private void mov(String s, int i) {h.put(s,i);}
	private void mov(String s, String i) {h.put(s,h.get(i));}
	private void add(String s, int i) {int tmp=h.get(s);tmp+=i;h.put(s, tmp);}
	private void add(String s, String i) {int tmp=h.get(s);tmp+=h.get(i);h.put(s, tmp);}
	private void sub(String s, int i) {int tmp=h.get(s);tmp-=i;h.put(s, tmp);}
	private void sub(String s, String i) {int tmp=h.get(s);tmp-=h.get(i);h.put(s, tmp);}
	private void prt(String s,int i) {
		Set<String> key=h.keySet();
		Iterator <String> it=key.iterator();
		System.out.println("["+v.get(i)+"]");
		while(it.hasNext()) {
			String tmpkey=it.next();
			System.out.print(tmpkey.toUpperCase()+":"+h.get(tmpkey)+" ");
		}
		System.out.println("\n출력할 결과는 "+h.get(s)+". 프로그램 실행 끝");}
	public void run() {
		System.out.println("수퍼컴이 작동합니다. 프로그램을 입력해주세요. GO를 입력하면 작동합니다.");
		while(true) {
		start();
		cal();
		clear();}}
}
public class thirteen{
	public static void main(String[]args) {
		Supercom sp=new Supercom();
		sp.run();
	}
}

 

'JAVA > 공부' 카테고리의 다른 글

9. 자바 GUI 기초, AWT와 스윙(Swing)  (0) 2021.01.19
8. 입출력 스트림과 파일 입출력  (0) 2021.01.17
6. 모듈과 패키지 개념, 자바 기본 패키지  (0) 2021.01.14
5. 상속  (0) 2021.01.14
4. 클래스와 객체  (0) 2021.01.14