不使用String(Java)将十进制转换为基数2-16

时间:2013-05-05 23:41:04

标签: java

我正在编写一个程序,将基数为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

我想我已经正确设置了,我只是不确定如何攻击它。我理解我正在做的事情的概念,而不是执行它。

1 个答案:

答案 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)]);
        }
    }
}