안녕하세요!! 추석은 잘 보내셨나요??
아래 코드를 참조하여 사용자가 키보드로 입력한 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();
}
}
```
sehongpark님의 답변
## API 활용 방법
자바 API를 활용해서 binary string -> hex string 으로 변환 할 수 있어요.
아래 링크 참고해보시구 또 질문 주셔요.
### 관련 문제
+ 이진수와 십육진수 (http://cloudstudying.kr/challenges/150)
pms5076님의 답변
아 진짜 봐도 봐도 모르겠어요ㅜㅜ
우선 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는 뭐고,,ㅠㅠㅠㅠ 진짜 초보라서 죄송해요ㅠㅠㅠ
sehongpark님의 답변
## 문제 분석
먼저 문제가 무엇을 요구하는지 부터 분석해 볼까요?
+ 사용자가 키보드로 입력한 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
```
pms5076님의 답변
그러면 제가 위에 올린 코드처럼 할 필요없고 답변해주신 저 코드를 토대로
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();
}
이렇게 작성하면 되는거겠죠,,?
sehongpark님의 답변
## 출제자의 의도
출제자의 의도가 중요할 것 같습니다.
동작하는 코드를 원한다면 위 코드대로 제출해도 될 듯하나, 위에서 제시한 코드를 이해하고 이를 직접 구현하길 원한다면 그에 맞게 구현해야하겠어요.