java
package 基础练习;
import java.util.Scanner;
public class 十六进制转八进制 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int x = sc.nextInt();
for(int i = 0;i<x;i++) {
String line = sc.next();
StringBuilder sb = new StringBuilder();
for(int j=0;j<line.length();j++) {
//取每一位十六进制转成二进制放在一个容器里
sb.append(hexToBin(line.substring(j, j+1)));
}
String bin =format3(sb.toString());
//取每一位二进制数转成八进制放在一个容器里
StringBuilder sb1 = new StringBuilder();
for(int j = 0;j<line.length();j+=3) {
sb.append(binToOct(bin.substring(j, j+3)));
}
String result = sb1.toString();
for(int k = 0;k<result.length();k++) {
result = result.substring(k);
break;
}
System.out.println(result);
}
}
//十六进制转二进制
public static String hexToBin(String hex) {
return format4(Integer.toBinaryString(Integer.valueOf(hex,16)));
}
//二进制转八进制
public static String binToOct(String bin) {
return Integer.toOctalString(Integer.valueOf(bin,2)) ;
}
//对二进制转八进制时前面可能少0进行填补
public static String format3(String str) {
if(str.length()%3==2) {
str = "0"+str;
}
if(str.length()%3==1) {
str = "00"+str;
}
return str;
}
//对十六进制转二进制时可能少0进行填补,比如十六进制1转成二进制还是1,十六进制2转换成二进制会是0010
public static String format4(String str) {
if(str.length()%4==3) {
str = "0"+str;
}
if(str.length()%4==2) {
str = "00"+str;
}
if(str.length()%4==1) {
str = "000"+str;
}
return str;
}
}
这是报错的原因
Exception in thread "main" java.util.InputMismatchException
at java.util.Scanner.throwFor(Unknown Source)
at java.util.Scanner.next(Unknown Source)
at java.util.Scanner.nextInt(Unknown Source)
at java.util.Scanner.nextInt(Unknown Source)
at 基础练习.十六进制转八进制.main(十六进制转八进制.java:9)
int x = sc.nextInt()这里你输入的是0x吗?