【问题标题】:String Number Addition Java字符串数字加法 Java
【发布时间】:2020-11-17 16:47:38
【问题描述】:

这是我学习 Java 的第二周,我正在尝试实现一些我在正在学习的书中看到的功能。

在第一个函数中,我想将整数表示为整数位数组,以便绕过整数值的范围。

例如:


第一个功能

输入:整数输入(123456)

输出:integerString[] = {1,2,3,4,5,6}

第二个功能

输入:stringInput[] = {123456}

输出:integerString[] = {1,2,3,4,5,6}

第三个功能:

(我想像普通加法一样添加 2 个整数字符串值)

输入:integerString1[] = {1,2,3,4,5,6} integerString2[] = {1,2,3,4,5,6}

输出:[2,4,6,9,1,2]


这是我目前所拥有的,它充满了错误,我能得到的只是一个空输出。将不胜感激。

谢谢。

public class tryingOut{
    
    public static int[] integerToNumberArray(int value) {
        String temp = Integer.toString(value);
        int[] list = new int[temp.length()];
        for (int i = 0; i < temp.length(); i++) {
            list[i] = temp.charAt(i) - '0';
        }
        return list;
    }
    
    public static boolean isNumeric(String value) {
        if (value == null) {
            return false;
        }
        try {
            int d = Integer.parseInt(value);
        } catch (NumberFormatException nfe) {
            return false;
        }
        return true;
    }
    
    public static int[] stringToNumberArray(String value) {
        
        boolean checkNumeric = isNumeric(value);
        
        if (checkNumeric = false) {
            return null;
        } else {
            String[] items = value.replaceAll("\\[", "").replaceAll("\\]", "").replaceAll("\\s", "").split(",");
            
            int[] results = new int[items.length];
            
            for (int i = 0; i < items.length; i++) {
                try {
                    results[i] = Integer.parseInt(items[i]);
                } catch (NumberFormatException nfe) {
                    
                }
            }
            return results;
        }
    }
    
    public static int[] addNumberArrays(int[] a1, int[] a2) {
        int[] result = null;
        
        return result;
    }
    
    public static void main(String[] args) {
        
        int test1 = 19;
        int test2 = 823;
        int[] list1 = integerToNumberArray(test1);
        int[] list2 = integerToNumberArray(test2);
        
        //  stringToNumberArray(test1);
        //  stringToNumberArray(test2);
        
        
    }
}

【问题讨论】:

  • "充满错误,我只能得到一个空输出" 你应该告诉我们这些错误中至少有一个的细节,以及你是哪一行代码期望打印一些输出?
  • 你知道如何使用调试器吗?
  • 请将您的帖子限制在您的一个函数示例中,并包括您使用它遇到的错误
  • 顺便说一句,要处理非常大的整数,请使用 Java 内置的 BigInteger 类。
  • 这并不难,但比你想象的要难。例如,您需要处理从一个添加到下一个添加的结转。因此,由于 6 + 6 是 12,您需要将 2 放入数组位置并将 1 带到下一个加法。这也意味着如果索引 0 添加到生成进位的位置,您需要决定如何处理它,因为您无法进位到 -1 的位置。所以你要么复制数组,要么声明溢出。

标签: java


【解决方案1】:

欢迎来到使用 JAVA 进行编程的世界。首先,我感谢您对编程的热情和您所做的努力。

正如Basil Bourque 在 cmets 中提到的,您可以通过BigInteger 实现这一目标。但是,我喜欢您自己尝试此操作的兴趣,因此我将尝试在下面分享一个代码,其中包含我可以提供的尽可能多的描述,以使其对您来说不太可靠。


指出原始代码中的一些错误:

  1. 您不需要为您的方法 isNumeric(String value) 单独处理 nullif-condition,因为 try-catch 块会自动为您处理它。

  2. 对于stringToNumberArray(String value) 方法,您不需要使用String.split,而且还不清楚您在String[] items = ... 中做了什么


完整代码:

public class PlayingWithInt {
    
    public static boolean isNumeric(String value) {
        try {
            Integer.parseInt(value);
        } catch (NumberFormatException nfe) {
            // This handles both null and other non int values so we don't need an extra condition to check for null
            return false;
        }
        return true;
    }
    
    // Assuming argument value is "123456"
    public static int[] stringToNumberArray(String value) {
        if (isNumeric(value)) { // We generally don't write `== true` or `== false` with boolean values
            char[] valueAsCharArray = value.toCharArray(); // valueAsCharArray = {'1', '2', '3', '4', '5', '6'}
            int[] valueAsIntArray = new int[valueAsCharArray.length]; // valueAsIntArray = {0, 0, 0, 0, 0, 0}
            
            for (int i = 0; i < valueAsCharArray.length; i++) {
                valueAsIntArray[i] = valueAsCharArray[i] - '0';
            }
            return valueAsIntArray; // valueAsCharArray = {1, 2, 3, 4, 5, 6}
        }
        return null; // Null will be returned if the value is not numeric
    }
    
    // Assuming argument value is {"1", "2", "3", "4", "5", "6"}
    public static int[] stringToNumberArray(String[] value) {
        int[] valueAsIntArray = new int[value.length]; // valueAsIntArray = {0, 0, 0, 0, 0, 0}
        
        for (int i = 0; i < value.length; i++) {
            valueAsIntArray[i] = value[i].charAt(0) - '0';
        }
        return valueAsIntArray; // valueAsCharArray = {1, 2, 3, 4, 5, 6}
    }
    
    // Let's say value is 123456
    public static int[] integerToNumberArray(int value) {
        String valueAsString = Integer.toString(value); // valueAsString = "123456"
        return stringToNumberArray(valueAsString); // We are using our already built method that does the same thing.
    }
    
    public static int[] addNumberArrays(int[] a1, int[] a2) {
        int maxLength;
        if (a1.length > a2.length) maxLength = a1.length;
        else maxLength = a2.length;
        
        int[] result = new int[maxLength + 1];
        
        int i = a1.length - 1; // Index iterator for a1
        int j = a2.length - 1; // Index iterator for a2
        int k = result.length - 1; // Index iterator for result
        int carry = 0; // carry to handle case when the sum of two digits more than deci/ ten (10)
        
        while (i >= 0 && j >= 0) {
            int sum = a1[i] + a2[j] + carry;
            result[k] = sum % 10;
            carry = sum / 10;
            i--;
            j--;
            k--;
        }
        
        // If a1 has more digits than a2
        while (i >= 0) {
            int sum = a1[i] + carry;
            result[k] = sum % 10;
            carry = sum / 10;
            i--;
            k--;
        }
        
        // If a2 has more digits than a1
        while (j >= 0) {
            int sum = a2[j] + carry;
            result[k] = sum % 10;
            carry = sum / 10;
            j--;
            k--;
        }

        result[0] = carry;
    
        return result;
    }
    
    public static void main(String[] args) {
        int test1 = 123456;
        int test2 = 123456;
        int[] num1 = integerToNumberArray(test1);
        int[] num2 = integerToNumberArray(test2);
        int[] result = addNumberArrays(num1, num2);
        
        for (int i : result) System.out.print(i); // This is known as enhanced-for-loop or for-each-loop
        
        System.out.println();        
    }
}

输出:

0246912

附加输入输出:

示例 1

代码:

public static void main(String[] args) {
    int test1 = 19;
    int test2 = 823;
    int[] num1 = integerToNumberArray(test1);
    int[] num2 = integerToNumberArray(test2);
    int[] result = addNumberArrays(num1, num2);
    
    for (int i : result) System.out.print(i); // This is known as enhanced-for-loop or for-each-loop
    
    System.out.println();        
}

输出:

0842

示例 2

代码:

public static void main(String[] args) {
    int test1 = 823;
    int test2 = 19;
    int[] num1 = integerToNumberArray(test1);
    int[] num2 = integerToNumberArray(test2);
    int[] result = addNumberArrays(num1, num2);
    
    for (int i : result) System.out.print(i); // This is known as enhanced-for-loop or for-each-loop
    
    System.out.println();        
}

输出:

0842

示例 3

代码:

public static void main(String[] args) {
    int test1 = 999;
    int test2 = 999;
    int[] num1 = integerToNumberArray(test1);
    int[] num2 = integerToNumberArray(test2);
    int[] result = addNumberArrays(num1, num2);
    
    for (int i : result) System.out.print(i); // This is known as enhanced-for-loop or for-each-loop
    
    System.out.println();        
}

输出:

1998

参考资料:

  1. String.toCharArray()

  2. Enhanced for-loop |OR| For-Each Loop

  3. Integer.parseInt(String value)

【讨论】:

  • 非常感谢您的详细解释。它让我看到的每一个概念都非常清晰。
  • 不客气。如果您觉得这有帮助,请不要忘记投票。 Happy Coding
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-04-13
  • 1970-01-01
  • 2013-11-24
  • 2013-04-03
  • 1970-01-01
相关资源
最近更新 更多