Java练习
小白刚开始准备蓝桥杯,代码中有很多不足,有些地方可以用更好的函数方法代替。思路是先将十六进制转为二进制,再将二进制转为八进制。
代码:
package com.dada.Q1;
import java.util.ArrayList;
import java.util.Scanner;
public class q1_3 {
static String[] bin = {"0000","0001","0010","0011","0100","0101","0110","0111","1000","1001","1010","1011","1100","1101","1110","1111"};
static String[] oct = {"0","1","2","3","4","5","6","7"};
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
String[] arr = new String[n]; //用来保存每一行的十六进制数
for (int i = 0; i < n; i++) {
arr[i] = sc.next();
}
String binaryCode ; //存储转换后的二进制
String result; //存储转换后的八进制
for (int i = 0; i < n; i++) {
binaryCode = trans(arr[i]); //将本行的十六进制数转为二进制字符串;
//System.out.println(binaryCode);
result = tooctal(binaryCode); //八进制处理
while (result.substring(0,1).equals("0"))
{
result = result.substring(1); //去零
}
System.out.println(result);
}
}
public static String trans(String hex) {
char buffer; //存储单个十六进制字符
ArrayList List = new ArrayList(); //存储转成的二进制字符
for (int i = 0; i < hex.length(); i++) {
buffer = hex.charAt(i);
switch (buffer) //依次将每一个字符替换成二进制
{
case '0' : List.add(bin[0]); break;
case '1' : List.add(bin[1]); break;
case '2' : List.add(bin[2]); break;
case '3' : List.add(bin[3]); break;
case '4' : List.add(bin[4]); break;
case '5' : List.add(bin[5]); break;
case '6' : List.add(bin[6]); break;
case '7' : List.add(bin[7]); break;
case '8' : List.add(bin[8]); break;
case '9' : List.add(bin[9]); break;
case 'a' : case 'A': List.add(bin[10]); break;
case 'b' : case 'B': List.add(bin[11]); break;
case 'c' : case 'C': List.add(bin[12]); break;
case 'd' : case 'D': List.add(bin[13]); break;
case 'e' : case 'E': List.add(bin[14]); break;
case 'f' : case 'F': List.add(bin[15]); break;
}
}
return String.join("",List);
}
public static String tooctal(String binaryCode)
{
//前边添0
int rmd = binaryCode.length()%3;
String inc = "";
for (int i = 0; i < (3-rmd); i++) {
inc+="0";
}
binaryCode = inc+binaryCode; //给二进制串前边补零
// System.out.println(binaryCode);
String son ;
ArrayList array = new ArrayList();
int i = 0;
while(i<=binaryCode.length()-2) {
son = binaryCode.substring(i,i+3); //循环获取三个字符
i = i+3;
switch (son)
{
case "000" : array.add(oct[0]); break;
case "001" : array.add(oct[1]); break;
case "010" : array.add(oct[2]); break;
case "011" : array.add(oct[3]); break;
case "100" : array.add(oct[4]); break;
case "101" : array.add(oct[5]); break;
case "110" : array.add(oct[6]); break;
case "111" : array.add(oct[7]); break;
}
}
return String.join("",array);
}
}