【问题标题】:Natural number coping sting to array自然数将字符串复制到数组
【发布时间】:2018-11-13 07:59:28
【问题描述】:
public class NaturalNumber 
{
int[] data = {};

private int toInt(char c)
{
    return (int)c - (int)'0';////converses a digit character to its integer value
}

我想将来自initData 的数字作为整数存储在数组数据中。我试过这个但没有用。

public NaturalNumber(String initData)
{
    int[]data =new int[10];
    for(int i=0;i<10;i++)
    data[i] =Character.digit(initData.charAt(i), 10);}


/**compare this to other number and find out which one bigger or are they equal*/

public int compareTo(NaturalNumber other)
{

}


/**I want to set digitIndex between 0 and data.length - 1 and value to between 0 and 9*/


public void setDigit(int digitIndex, int value)
{
    digitIndex=Math.max(0,data.length-1);
    value=Math.max(0,9);
}

【问题讨论】:

    标签: java string compare instantiation string-comparison


    【解决方案1】:

    NaturalNumber(String initData) 构造函数存在索引超出范围的问题,例如:

    public static class NaturalNumber {
    
        private int[] data;
    
        public NaturalNumber(String initData) {
            final int length = initData.length();
            data = new int[length]; // now we should have enough space
            for(int i = 0; i < length; i++) {
                // Also there won't be any mismatch in size between 
                // initData and the maximum value for i so you don't
                // risk getting a IndexOutOfBoundsException
                data[i] = toInt(initData.charAt(i));
            }
        }
    
        private static int toInt(char c)
        {
            return (int)c - (int)'0'; // converts a digit character to its integer value
        }
    
        // possible implementation of compareTo
        public int compareTo(NaturalNumber that) {
            final int length = this.data.length;
            if(length != that.data.length) {
                return Integer.compare(length, that.data.length);
            }
    
            for(int i = 0; i < length; i++) {
                if(this.data[i] != that.data[i]) {
                    return Integer.compare(this.data[i], that.data[i]);
                }
            }
            return 0;
        }
    
        public void setDigit(int index, int value) {
            if(value < 0 || value > 9) {
                return;
            }
            if(index < 0 || index > data.length - 1) {
                return;
            }
            data[index] = value;
        }
    }
    

    【讨论】:

    • @doge47 我注意到我在constructor =] 中有一些拼写错误我已经更新了我的答案并修复了这些错误。
    • 在构造函数 initData 中是一个包含此 NaturalNumber 数字的字符串,因此我必须实例化数据数组以更正大小并将 initData 中的数字作为整数存储在数组数据中。构造函数应该使用其设置器将每个数字设置为
    • 并且设置器的验证是 digitIndex 必须介于 0 和 data.length - 1 AND 值必须介于 0 和 9 之间,否则设置器不应对数据数组执行任何操作。
    • @doge47 我已经更新了我的答案以解决您提到的更改。如果您有任何其他问题,请查看并告诉我。
    猜你喜欢
    • 1970-01-01
    • 2020-11-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多