Java 求出基数为14的两个数字的乘积和和和,并在基数为14的情况下回答

Java 求出基数为14的两个数字的乘积和和和,并在基数为14的情况下回答,java,Java,我已经编写了以下代码来计算两个数字的和和和积,这两个数字将被输入到基数14中。答案也应该在基数14中 我没有任何编译错误。但答案是垃圾。有人能帮我找出问题所在吗 程序应提示用户输入两个以14为基础的数字,然后显示总和和 这两个数字的乘积输入了14个数字。输出也应以14为基础 import java.util.Scanner; public class H6_gedion { public static void main(String[] args) { double[

我已经编写了以下代码来计算两个数字的和和和积,这两个数字将被输入到基数14中。答案也应该在基数14中

我没有任何编译错误。但答案是垃圾。有人能帮我找出问题所在吗

程序应提示用户输入两个以14为基础的数字,然后显示总和和 这两个数字的乘积输入了14个数字。输出也应以14为基础

import java.util.Scanner;
public class H6_gedion {

    public static void main(String[] args) {
        double[] Answer;
        final int base = 14;
        Scanner get = new Scanner(System.in);
        String[] input = new String[2];
        System.out.println("Welcome to earth!!\nPlease Enter two 14-based 
            numbers in the next line: ");
            input = get.nextLine().trim().split("\\s+"); String num1 = input[0]; String num2 = input[1]; ValidateNumInBase(num1, base); ValidateNumInBase(num2, base);
            //Answer = compute(toDecimal(num1, num2));
            //System.out.println(Answer[0] + " " + Answer[1]);
            toBase14(compute(toDecimal(num1, num2)));
        }


        public static void ValidateNumInBase(String num, int base) {
            char chDigit;
            for (int d = 0; d < num.length(); d++) {
                chDigit = num.toUpperCase().charAt(d);
                if (Character.isDigit(chDigit) && (chDigit - '0') >= base) {
                    System.out.println("cannot have digit " + chDigit + " in base " +
                        base);
                    System.exit(1);
                } else if (Character.isLetter(chDigit) && (chDigit - 'A') + 10 >=
                    base) {
                    System.out.println("cannot have digit " + chDigit + " in 
                        base " + 
                        base);
                    System.exit(1);
                } else if (!Character.isDigit(chDigit) &&
                    !Character.isLetter(chDigit)) {
                    System.out.println("Invalid digit character " + chDigit);
                    System.exit(1);
                }
            }
        }

        public static double[] toDecimal(String num1, String num2) {
            double val1 = 0;
            double val2 = 0;
            double decDigit = 0;
            char chDigit;
            int L = num1.length();
            for (int p = 0; p < L; p++) {
                chDigit = Character.toUpperCase(num1.charAt(L - 1 - p));
                if (Character.isLetter(chDigit)) {
                    decDigit = chDigit - 'A' + 10;
                } else if (Character.isDigit(chDigit)) {
                    decDigit = chDigit - '0';
                } else {
                    System.out.println("error: unrecognized digit");
                    System.exit(1);
                }
                val1 += decDigit * Math.pow(10, p);
            }
            L = num2.length();
            for (int p = 0; p < L; p++) {
                chDigit = Character.toUpperCase(num2.charAt(L - 1 - p));
                if (Character.isLetter(chDigit)) {
                    decDigit = chDigit - 'A' + 10;
                } else if (Character.isDigit(chDigit)) {
                    decDigit = chDigit - '0';
                } else {
                    System.out.println("error: unrecognized digit");
                    System.exit(1);
                }
                val2 += decDigit * Math.pow(10, p);

            }
            double[] decimalNum = {
                val1,
                val2
            };

            return decimalNum;

        }

        public static double[] compute(double[] decimalNum) {
            double sum = decimalNum[0] + decimalNum[1];
            double prod = decimalNum[0] * decimalNum[1];
            double[] Solution = {
                sum,
                prod
            };
            return Solution;
        }

        public static void toBase14(double[] Solution) {
            double val = Solution[0];
            //detrmine the number of digits in base 14
            int D = 1;
            for (; Math.pow(14, D) <= val; D++) {}

            //use char array to hold the new digits
            char[] newNum = new char[D];
            double pwr;
            for (int p = D - 1; p >= 0; p--) {
                pwr = Math.pow(14, p);
                double decDigit = Math.floor(val / pwr);
                val -= decDigit * pwr;

                if (decDigit <= 9) {
                    newNum[D - 1 - p] = (char)('0' + (int) decDigit);
                } else {
                    newNum[D - 1 - p] = (char)('A' + (int)(decDigit - 10));
                }
            }

            val = Solution[1];
            //detrmine the number of digits in base 14
            //int D =1;
            for (; Math.pow(14, D) <= val; D++) {}

            //use char array to hold the new digits
            char[] newNum2 = new char[D];
            //double pwr;
            for (int p = D - 1; p >= 0; p--) {
                pwr = Math.pow(14, p);
                double decDigit = Math.floor(val / pwr);
                val -= decDigit * pwr;

                if (decDigit <= 9) {
                    newNum2[D - 1 - p] = (char)('0' + (int) decDigit);
                } else {
                    newNum2[D - 1 - p] = (char)('A' + (int)(decDigit - 10));
                }
            }

            System.out.println("Sum: " + newNum.toString());
            System.out.println("Product: " + newNum2.toString());

        }
    }
}
import java.util.Scanner;
公共级H6_gedion{
公共静态void main(字符串[]args){
双[]答案;
最终整数基数=14;
Scanner get=新扫描仪(System.in);
字符串[]输入=新字符串[2];
System.out.println(“欢迎来到地球!!\n请输入两个基于14的
下一行的数字:”;
input=get.nextLine().trim().split(\\s+);字符串num1=input[0];字符串num2=input[1];validateEnumInbase(num1,base);validateEnumInbase(num2,base);
//答案=计算(toDecimal(num1,num2));
//System.out.println(答案[0]+“”+答案[1]);
toBase14(计算(toDecimal(num1,num2));
}
公共静态void validateEnumInBase(字符串num,int base){
char-chDigit;
对于(int d=0;d=base){
System.out.println(“基数中不能有数字”+chDigit+”+
基础);
系统出口(1);
}else if(Character.isleter(chDigit)&&(chDigit-'A')+10>=
(基础){
System.out.println(“中不能有数字”+chDigit+”
基数“+
基础);
系统出口(1);
}如果(!Character.isDigit(chDigit)为else,则为&&
!Character.isleter(chDigit)){
System.out.println(“无效数字字符”+chDigit);
系统出口(1);
}
}
}
public static double[]toDecimal(字符串num1,字符串num2){
双值1=0;
双val2=0;
两位数=0;
char-chDigit;
int L=num1.length();
对于(int p=0;p如果(decDigit,您可能正在尝试重新实现一个已经存在的功能;从指定的基础将
字符串
转换为
int

Integer
类包含两种方法,这两种方法将非常有帮助:

将字符串作为输入,并尝试将其转换为相应的整数,其中基数是数字的基数。
integer.valueOf(“D”,14)
将返回13。但是,如果字符串不包含可解析的int,该方法将抛出
NumberFormatException

将使用int作为输入,并返回指定基数的字符串表示形式


您可以依赖这样一个事实:如果输入值不正确,
Integer.valueOf(…)
将抛出错误,以重新提示用户输入。此外,算术是为整数定义的,不考虑基数。

“我没有任何错误。但答案是垃圾。”
——这听起来像是一个逻辑错误,因此您的第一个语句不正确。也许您的意思是说您没有任何“编译”错误。您的代码太多了。分而治之--将代码拆分为更小的可测试单元/方法,并对其进行彻底测试。阅读:了解您应该执行的更多调试技巧。欢迎使用堆栈溢出!我们希望从问题中了解一些内容,我建议您阅读和上的部分。As@HovercraftFullOfEels(great name)指出,您要求您的代码在没有明确划分职责的情况下执行许多不同的操作,这使得调试逻辑错误变得毫无必要