这个构造函数看起来像什么?

时间:2014-02-09 05:05:20

标签: java arrays

public byte[] d

在此字节数组中,每个字节代表一个数字,其中d [0]是最低有效数字,[d.length-1]是最高有效数字。例如,543210存储为{0,1,2,3,4,5}。最重要的数字不能为零;

在实际实现中,此数组应该是私有的。

构造函数详细信息:AdditionOnlyInt

public AdditionOnlyInt(java.lang.String a)

这是一个构造函数,它使用输入字符串表示的值构造AdditionOnlyInt。例如,如果输入a =“00012340”,则此构造函数将字节数组设置为值{0,4,3,2,1}。请注意,不应存储输入字符串中的前导零。

Parameters:a - is a string such as "00012340"

我不知道怎么做这个构造函数呢?

我知道它非常错,但我试过这个

public AdditionOnlyInt(String number)  {
   int counter = number.length();
   number.replace("0","");
   data = new byte[number.length()];
   int i = 0;
   while(i<number.length())  {
      data[i] = (byte)number.charAt(counter);
      i++;
      counter--;
   }
}

我知道转换为byte会给你不同的值。

3 个答案:

答案 0 :(得分:1)

你很幸运:只需要对你的程序进行一些修改。你不是完全错了。 :)

首先,这三个陈述适合你:

int counter = number.length();
number.replace("0","");
data = new byte[number.length()];

你得到一个计数器,它是无偏字符串(即带有零),毫无疑问会小于字符串,没有零。您还将创建具有无偏列表大小的数组。

嗯......如果你的第二个陈述有所作为,String是不可变的,因此修改它所做的任何事情都只会生成一个新的String,而旧的number = number.replace("0", ""); 不会被修改。这是可以解决的:

number = String.valueOf(Integer.parseInt(number));

...但实际上,根据您的输入集, 应该由此修复:

byte[]

这样,你保持内部零。

现在假设您的data实际上被称为d不是 byte,我们必须解决一个小问题:以{为单位的数字} {1}}非常大(也就是说,'7'的字符是0x37,即55)。

所以我们需要偏见它。无论我们的byte数是多少,我们都需要从中减去'0';也就是说,我们需要从中减去48,以便给我们正确的值。我会告诉你片刻的样子。

现在,为你的循环:

int i = 0;
while(i<number.length())  {
   data[i] = (byte)number.charAt(counter);
   i++;
   counter--;
}

我不是因为反击的必要性而被卖掉,所以让我们摆脱它。现在我们将从现在开始使用i。从本质上讲,这意味着我们必须将charAtString的末尾移动到String的前端,将值放入数组中。 (大部分)看起来是这样的:

data[i] = (byte) (number.charAt(number.length() - 1 - i);

在这里支付密切关注 - 我们必须从蝙蝠的长度中减去1,因为我们在String上没有与其最大长度完全相等的位置。然后我们从中减去i,这样我们就可以在String上向后移动。

也就是说,对于长度为10而没有零的字符串,如果我们从i = 0开始,我们会得到10 - 1 - 0 = 9或最后一个字符的字符。

还记得我所说的偏倚结果吗?获得数据后,请务必从中减去'0'

data[i] = (byte) (number.charAt(number.length() - 1 - i) - '0';

真的,这就是它的全部。你大多得到它,除了迭代和消毒有点不稳定。

答案 1 :(得分:0)

public AdditionOnlyInt(String input)
{
    //remove trailing 0s
    int  relevStart = 0;
    while(input.charAt(relevStart) == '0')
    {
        relevStart++;
    }
    String relevantTerms = input.substring(relevStart);
    //flip the remaining chars
    int length = relevantTerms.length();
    data = new byte[length];
    for(int iter = 0; iter < length; iter++)
    {
        data[iter] = (byte) (relevantTerms.charAt(length - iter - 1) - '0');
    }
}

答案 2 :(得分:-1)

希望这有帮助。

第1步:使用Integer value = Integer.valueOf(args);

检查是否为数字

步骤2:通过调用byte array[] = value.toString().getBytes();

将Integer转换为字节数组

步骤3:字节数组以正向方式包含值,因此交换数组中的所有值将使用户请求的数字反转。

for (int i = 0, j = array.length - 1; i < array.length / 2; i++, j--) {
                        byte temp = array[i];
                        array[i] = array[j];
                        array[j] = temp;
                    }

找到以下完整的程序:

   public class AdditionOnlyInt {

        public static void main(String[] args) {
            // TODO Auto-generated method stub
            new AdditionOnlyInt("01010120");

        }

        public AdditionOnlyInt(String args) {
            try {
                Integer value = Integer.valueOf(args);

                byte array[] = value.toString().getBytes();

                for (int i = 0, j = array.length - 1; i < array.length / 2; i++, j--) {
                    byte temp = array[i];
                    array[i] = array[j];
                    array[j] = temp;
                }

                for (int i = 0; i < array.length; i++) {
                    System.out.print((char) array[i]);
                }
            } catch (Exception e) {
            }
        }
    }