有人可以为我解释这段代码吗?基本转换代码



因此,对于家庭作业,我们必须制作一个程序,将数字从一个基数转换为另一个基数(即以 2 为底数的 110 转换为以 10 为底数的 6(。我问我的朋友他是怎么做到的,因为我遇到了麻烦,他只是给我发了他的代码,没有别的。有人可以解释这段代码的逻辑,以便我可以制作自己的程序并真正了解如何解决这个问题。谢谢!

import java.util.*;
public class Base_Converter {
    public static final String value = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
    public static void main(String args[]){
    int x, y;
    String num, base10 = "";
    Scanner scan = new Scanner(System.in);
        System.out.println("Enter a number you want to convert.");
        num = scan.nextLine();
        num = num.toUpperCase();
        System.out.println("What base is it in?");
        x = scan.nextInt();
        System.out.println("What base do you want to convert it to?");
        y = scan.nextInt();
        if(x <= 36 && y <= 36 && x > 1 && y > 1){
        base10 = toBase10(num,x);
        num = newBase(base10,y);
        System.out.println(num);
        }
    }
    public static String toBase10(String num, int from){
        long total = 0;
        int counter = num.length();
        char[] stringArray = num.toCharArray();
        for(char w : stringArray){
            counter--;
            total += value.indexOf(w)*Math.pow(from,counter);
        }
        return String.valueOf(total);
    }
    public static String newBase(String num, int to){
        String total = "";
        int current = 0;
        while(Integer.valueOf(num) > 0){
            current = Integer.valueOf(num)%to;
            total = value.charAt(current)+total;
            num = String.valueOf(Integer.valueOf(num)/to);
        }
    return total;
    }
}

我认为你不应该关注你朋友的代码做了什么,而应该关注如何自己完成作业,因为我认为你的问题在于你缺乏理解。与其让你高高在上,不如带你了解基础转换的一些细节。

首先,读取用户输入。看起来您正在使用Java,因此只需使用扫描仪即可执行此操作。至少您需要读取要转换的数字,它是什么基数,以及输出将是什么基数。

接下来,我们要转换数字。您可以直接将数字相互转换(即将基数 2 转换为基数 8(,但这需要比我现在愿意提供的更多的脑力。相反,我建议始终首先将用户输入的数字转换为 10 基数(就像您的朋友所做的那样(。那么我们如何将未知基数的数字转换为 10 基数呢?

因此,让我们分解一个数字是如何表示的:假设我们有以十为基数的数字234。这相当于 4*10^0 + 3*10^1 + 2*10^24 + 30 + 200 = 234 。您可以对任何其他数字使用相同的转换。即,如果数字以 8 为基数1763,则以 10 为基数的值将为 3*8^0 + 6*8^1 + 7*8^2 + 1*8^33 + 48 + 448 + 512 = 1011 base 10(尝试在此处输入 1763 以证明。因此,要转换为十进制,您只需要看到将每个单独的数字乘以您的基数的幂减去 1。例如,由于11763中的第四个数字,因此将其乘以8^(4-1)。因为,您正在从用户那里读取字符串。您需要使用 ascii 图表将字符串的每个字符转换为整数。

现在从十进制转换为任何东西。您无需乘法,只需将每个值除以并写入余数即可!我会让其他人描述这个过程。

现在只需将此新值存储为字符串,执行以下操作

String output = "";
output += newValue;

在计算机科学中,仅仅复制别人的代码弊大于利。希望这有帮助!

相关内容

  • 没有找到相关文章

最新更新