繁体   English   中英

这个构造函数是什么样的?

[英]What will this constructor look like?

public byte[] d

在此字节数组中,每个字节代表一个数字,其中d [0]是最低有效数字,而a [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--;
   }
}

而且我知道转换为字节会为您提供不同的值。

您很幸运:只需要对程序进行少量修改。 你并不完全错。 :)

首先,这三个陈述很适合您:

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为单位的数字非常大(也就是说,“ 7”的字符为0x37,即55) 。

因此,我们需要对它进行偏见。 无论我们的byte数是多少,我们都需要从中减去'0' 也就是说,我们需要从中减去48,以得出正确的值。 一会儿,我会告诉你。

现在,为您的循环:

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

我没有因为需要柜台而被出售,所以让我们摆脱它。 现在,我们将从现在开始使用i 本质上,这是什么意思是,我们必须移动charAt从的末端String到的前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';

确实,这就是全部。 除了迭代和清理有点笨拙外,您大部分都已得到它。

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');
    }
}

希望这可以帮助。

步骤1:使用Integer value = Integer.valueOf(args);检查其是否为数字Integer value = Integer.valueOf(args);

步骤2:通过调用byte array[] = value.toString().getBytes();将Integer转换为字节数组byte array[] = value.toString().getBytes();

步骤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) {
            }
        }
    }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM