Java 创建长度不确定的数组?
我应该以数组的形式加上两个数字 范例Java 创建长度不确定的数组?,java,arrays,Java,Arrays,我应该以数组的形式加上两个数字 范例 839 as an array, {9,3,8} 2039 {9,3,0,2} 之所以是向后的,是因为我们必须从自己的位置开始。我只是不知道数组的大小应该是多少 public static int[] add(int [] x, int[] y){ int[] z = new int [x.length]; int j=0, hold, i; for(i=0; i<=z.len
839 as an array, {9,3,8}
2039 {9,3,0,2}
之所以是向后的,是因为我们必须从自己的位置开始。我只是不知道数组的大小应该是多少
public static int[] add(int [] x, int[] y){
int[] z = new int [x.length];
int j=0,
hold,
i;
for(i=0; i<=z.length-1;i++) {
z[i]=(x[i]+y[i]+j)%10;
j=(x[i]+y[i]+j)/10;
}
公共静态int[]add(int[]x,int[]y){
int[]z=新的int[x.length];
int j=0,
持有
我
对于(i=0;i而言,不执行加法实际上不可能确定结果的确切大小;您真正确定的是,它将是Math.max(x.length,y.length)
或Math.max(x.length,y.length)+1
因此,我认为有三种方法:
- 您始终可以分配
Math.max(x.length,y.length)+1
,并接受有时会有额外的前导零。
- 但是在这种情况下,为了避免在每次加法中添加越来越多的零,您可能需要预先计算
x
和y
中前导零的数量,并从总数中扣除这些前导零。这最终会使IMHO变得不必要的复杂
- 可以进行两次加法:一次确定长度以便创建数组,另一次实际填充结果
- 您可以首先分配
Math.max(x.length,y.length)+1并进行加法,然后如果最高有效位为零,则可以分配Math.max(x.length,y.length)
并复制除该零之外的所有数字。(您可能希望用于此。)
如果使用整数对象而不是基元int,则可以执行以下操作
Integer x = 1234;
x.toString().length();
这个怎么样
public static int[] add(int[] x, int[] y) {
int[] z = new int[x.length + y.length];
int i = 0;
for (int j = 0; i < x.length || i < y.length || j > 0; i++) {
int sum = (i < x.length ? x[i] : 0) + (i < y.length ? y[i] : 0) + j;
z[i] = sum % 10;
j = sum / 10;
}
// return Arrays.copyOf(z, i);
int[] res = new int[i];
System.arraycopy(z, 0, res, 0, res.length);
return res;
}
公共静态int[]add(int[]x,int[]y){
int[]z=新的int[x.length+y.length];
int i=0;
对于(int j=0;i0;i++){
整数和=(i
您遇到的错误是什么?您可以将数组的大小作为两个数字的最大长度。数组不够大,无法容纳所有数字,因此如果我添加不同长度的数字,一些数字会被截断,如果它们相同,则前面会有额外的0。不幸的是,我的数组可能会重复教授很笨,不让我们学数学。否则我早就做完了,还有别的方法吗?@Fluxia:我不是说你需要用数学。我知道Java,你也知道Java,所以数学.max(x.length,y.length)
只是我告诉你的一个方便的方法“无论是x.length
还是y.length
,以较大者为准"。使用if
语句,或者使用三元运算符…?:
来实现这一点对您来说很简单。我已经尝试过了,但我的教授最初在我的项目中失败了。还有其他方法吗?您可以使用Arrays.copyOf,然后重复创建当前s的新数组ize+1(根据需要)