안녕하세요!! 추석은 잘 보내셨나요?? 아래 코드를 참조하여 사용자가 키보드로 입력한 int 데이터를 읽어 그것을 대응하는 16진수로 인쇄하는 프로그램 작성하라는데 적으면서도 뭔말인지 모르고 적었는데,, 이걸 바꾸려니까 도무지 모르겠어요,, 어디 부분을 수정해야할지 알려주세요ㅠㅠㅠ ``` package javaReportChapter1; import java.util.Scanner; public class dec2Hex { public static void main(String[] args) { // TODO Auto-generated method stub String binStr; int binStrLen; int dec = 0; Scanner in = new Scanner(System.in); System.out.print("Enter a binary string: "); binStr = in.next(); binStrLen = binStr.length(); for(int exp = 0; exp < binStrLen; ++exp ) { int charPos = binStrLen - 1 - exp; char binChar = binStr.charAt(charPos); if (binChar == '1') { dec += (int)Math.pow(2, exp); } else if (binChar != '0') { System.out.println("Error: Invalid binary string\"" + binStr + "\""); System.exit(1); } } System.out.println("The equivalent decimal for \"" + binStr + "\" is " + dec); in.close(); } } ```
## API 활용 방법 자바 API를 활용해서 binary string -> hex string 으로 변환 할 수 있어요. 아래 링크 참고해보시구 또 질문 주셔요. ### 관련 문제 + 이진수와 십육진수 (http://cloudstudying.kr/challenges/150)
아 진짜 봐도 봐도 모르겠어요ㅜㅜ 우선 binStr~~ 이런식으로 돼있는걸 다 hex로 바꿨는데요 for(int exp = 0; exp < hexStrLen; ++exp ) { int charPos = hexStrLen - 1 - exp; char hexChar = hexStr.charAt(charPos); if (hexChar == '1') { dec += (int)Math.pow(2, exp); } else if (hexChar != '0') { System.out.println("Error: Invalid binary string\"" + hexStr + "\""); System.exit(1); 이 부분이 그냥 아예 이해가 안돼용,, exp는 뭐고,, pow는 뭐고,,ㅠㅠㅠㅠ 진짜 초보라서 죄송해요ㅠㅠㅠ
## 문제 분석 먼저 문제가 무엇을 요구하는지 부터 분석해 볼까요? + 사용자가 키보드로 입력한 int 데이터를 읽어 그것을 대응하는 16진수로 출력 ## 핵심 요약 + 정수 입력 -> 16진수로 출력 ## How? 어떻게 해야 정수를 16진수로 출력할 수 있을까요? 직접 구현하는 방법도 좋겠지만, 그 기능을 이미 누군가 만들어 놓았다면 가져다가 쓰는 겁니다. int -> hex 변환 예 ``` int n = 17; String hexStr = Integer.toString(n, 16); // n을 16진수 스트링으로 변환 System.out.printf("0x%s",hexStr); // 변환된 16진수 문자열을 출력 ``` 위 코드를 실행하면 아래와 같은 결과가 나와요. ``` 0x11 ```
그러면 제가 위에 올린 코드처럼 할 필요없고 답변해주신 저 코드를 토대로 public static void main(String[] args) { // TODO Auto-generated method stub Scanner in = new Scanner(System.in); int n; System.out.print("정수를 입력하세요 : "); n = in.nextInt(); String hexStr = Integer.toString(n, 16); System.out.printf("16진수로 출력하면 %d은 0x%s 입니다.", n,hexStr); in.close(); } 이렇게 작성하면 되는거겠죠,,?
## 출제자의 의도 출제자의 의도가 중요할 것 같습니다. 동작하는 코드를 원한다면 위 코드대로 제출해도 될 듯하나, 위에서 제시한 코드를 이해하고 이를 직접 구현하길 원한다면 그에 맞게 구현해야하겠어요.