2

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

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

4

1 回答 1

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)]);
        }
    }
}
于 2013-05-06T00:28:25.553 回答