BACK-END/JAVA

[JAVA] 2진수를 원하는 진수로 변환해서 출력하는 프로그램

썬키 2022. 12. 22. 23:14

1. 개요

입력한 2진수 값을 8진수, 10진수, 16진수로 변경하여 출력하는 프로그램

여러가지 문법으로 구현 가능하지만 오늘 배운 제어문을 이용하여 작성해보았다.

프로그램이니만큼 원하는만큼 반복해서 사용할 수 있도록 하였다.

 

2. 코드

public static void main(String[] args) {
		// TODO Auto-generated method stub

		System.out.println("=============\n    진수 변환 프로그램\n=============");
		
		Scanner scanner = new Scanner(System.in);
		
		while(true) {
			System.out.print("2진수의 값을 입력해주세요 > ");
			String strBin = scanner.next();
			
			// 10진수로 변환
			int i10 = Integer.parseInt(strBin, 2);
			
			// 8진수로 변환
			String strOct = Integer.toOctalString(i10);
			
			// 16진수로 변환
			String strHex = Integer.toHexString(i10);
			
			System.out.println("변환할 진수를 선택해주세요. \n1. 8진수\n2. 10진수\n3. 16진수");
			byte number = scanner.nextByte();
			
			switch(number) {
				case 1 : System.out.printf("입력한 값을 8진수로 변환한 값은 0%s 입니다.%n", strOct);
							break;
				case 2 : System.out.printf("입력한 값을 10진수로 변환한 값은 %d 입니다.%n",i10);
							break;
				case 3 : System.out.printf("입력한 값을 16진수로 변환한 값은 0x%s 입니다.%n", strHex);
							break;
				default : System.out.printf("1 ~ 3 사이의 정수값만 입력할 수 있습니다.%n입력값:%d%n", number);
							break;
			}
			
			System.out.println("다시 실행하시겠습니까?(Y/N)");
			String replay = scanner.next();
			
			if(replay.equalsIgnoreCase("y")) {
				continue;
			} else break;
		}
	}

 

3. 접근 방법

ㆍ2진수를 8,10,16진수로 변경하는 프로그램이니까 Scanner 객체에 담긴 값을 2진수를 담을 수 있는 String 타입의 참조변수에 담아야겠다고 생각했다.

ㆍWrapper 클래스 Integer 안에는 static 메소드로 toHexString, toBinaryString, toOctString이 존재하므로

이 메소드를 이용해보려고 했다.

ㆍ위의 세 메소드는 매개변수로 int 값을 받으니까 String으로 받은 2진수 값을 Integer 클래스의 parseInt(String x, int radix)를 이용하여 10진수로 변환해서 매개변수로 넣어주면 되겠다고 생각했다.

 

4. 개선할 점

ㆍ메뉴 입력을 담는 number 변수의 값이 default 일 때 메뉴 입력을 받는 부분으로 다시 가려면 어떻게 해야할까?