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会给你不同的值。
答案 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
。从本质上讲,这意味着我们必须将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';
真的,这就是它的全部。你大多得到它,除了迭代和消毒有点不稳定。
答案 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();
步骤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) {
}
}
}