我正在编写一个程序,将基数为10的整数转换为任意2-16。以下是条款:
“方法是将用户选择的十进制值转换为用户选择的任何基数,并通过使用索引到一个字符数组0-9 amd AF初始化为一次打印转换后的值一个值。包含那些字符。 在该方法中,您将找到将分成十进制数的最大位值(即基数的幂)。 然后,您可以设置一个循环,该循环将从该功率下降到包括第0次幂,以确定每个位置值进入十进制数的次数。使用循环计数器,索引到字符数组以打印与商号对应的字符,然后从十进制数中减去位值和商的乘积。随着功率(循环指数)降低,重复直到您完成第0位值。
这是我到目前为止所拥有的:
import java.io.*;
import java.util.Scanner;
public class ConvertIt
{//start program
public static void main(String[] args)
{//start main
Scanner input = new Scanner(System.in);
System.out.println("Enter a positive integer from 0 to 10000.");
int number = input.nextInt();
System.out.println("Enter the base to convert to.");
int base = input.nextInt();
convertIt(number, base);
}//end main
public static void convertIt(int number, int base)
{//start method
int array = {0123456789ABCDEF};
while (number != 0)
{//start while
}//end while
for (int i = array.length-1; i > -1; i--)
{//start for
}//end for
}//end while
}//end method
}//end program
我想我已经正确设置了,我只是不确定如何攻击它。我理解我正在做的事情的概念,而不是执行它。
答案 0 :(得分:0)
这个怎么样:
import java.lang.StringBuilder;
import java.util.Scanner;
public class ConvertIt {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.println("Enter a positive integer from 0 to 10000.");
int number = input.nextInt();
System.out.println("Enter the base to convert to.");
int base = input.nextInt();
input.close();
convertIt(number, base);
}
public static void convertIt(int number, int base) {
if ( base <= 1 || base > 16)
return;
char[] array = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A',
'B', 'C', 'D', 'E', 'F' };
String convertedNum = "";
do {
convertedNum += array[number % base];
number = number / base;
} while (number != 0);
convertedNum = new StringBuilder(convertedNum).reverse().toString();
System.out.println(convertedNum);
}
}
编辑:首先,我没有注意到你想要在不使用字符串的情况下这样做。所以我也尝试为此提供解决方案,但我认为这有点混乱。我个人更喜欢使用字符串,可能是因为我不知道如何以更清洁的方式存储这些值。
import java.util.ArrayList;
import java.util.Scanner;
public class ConvertIt {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.println("Enter a positive integer from 0 to 10000.");
int number = input.nextInt();
System.out.println("Enter the base to convert to.");
int base = input.nextInt();
input.close();
convertIt(number, base);
}
public static void convertIt(int number, int base) {
if (base <= 1 || base > 16)
return;
char[] array = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A',
'B', 'C', 'D', 'E', 'F' };
ArrayList<Integer> converted = new ArrayList<Integer>();
// convert the number
do {
converted.add(number % base);
number = number / base;
} while (number != 0);
int count = converted.size() - 1;
int temp;
// revert the numbers
for (int i = (count - 1) >> 1; i < 0; --i) {
temp = converted.get(i);
converted.set(i, converted.get(count - i));
converted.set(count - i, temp);
}
// print the numbers
for (int i = 0; i < converted.size(); i++) {
System.out.print(array[converted.get(i)]);
}
}
}