改变字节的真正的数组的Java
问题描述:
byte[] AllNumber = {4,3,2,1,0,5,6,7,8,9};
byte[] MultNumber = {4,3,2,1,0,5,6,7,8,9}; // No matter the content
byte[] DivNumber = {4,3,2,1,0,5,6,7,8,9}; // No matter the content
Alter(AllNumber,MultNumber,DivNumber,5.0,3,2); //The Arrays must be Altered!!
for (int i = 0; i<MultNumber.length; i++) {
System.out.println("MultNumber["+i+"]:"+MultNumber[i]);
}
for (int i = 0; i<DivNumber.length; i++) {
System.out.println("DivNumber["+i+"]:"+DivNumber[i]);
}
现在我有这样的方法:
Alter(byte[] src, byte[] Mlt, byte[] Dvs, double dNum, int Lngt, int Ini) {
// INI THE PROBLEM
Mlt = Arrays.copyOf(Mlt, src.length + Lngt); //HERE IS THE ASSIGNATION
for (int i = ini; i<Mlt.length; i++) {
Mlt[i] = Mlt[i]*dNum; //No matter the operation (to simplify the problem)
}
Dvs = Arrays.copyOf(Dvs, src.length - Lngt); //HERE IS THE ASSIGNATION
for (int i = Ini; i<Dvs.length; i++) {
Dvs[i] = Dvs[i]/dNum; //No matter the operation (to simplify the problem)
}
// END THE PROBLEM
}
另一种尝试
//Another Attempt!!!
Alter(byte[] src, byte[] Mlt, byte[] Dvs, double dNum, int Lngt, int Ini) {
// INI THE PROBLEM
byte[] TM = new byte[src.length + Lngt]
for (int i = ini; i<Mlt.length; i++) {
TM[i] = Mlt[i]*dNum; //No matter the operation (to simplify the problem)
}
Mlt = TM; //HERE IS THE ASSIGNATION
TM = null;
byte[] TD = new byte[src.length - Lngt]
for (int i = Ini; i<Dvs.length; i++) {
TD[i] = Dvs[i]/dNum; //No matter the operation (to simplify the problem)
}
Dvs = TD; //HERE IS THE ASSIGNATION
TD = null;
// END THE PROBLEM
}
我希望得到两个安排后改变执行方法“Alter”的调用。 我如何做到这一点?
我需要改变阵列的长度!
谢谢你的宝贵帮助。
PD。看起来稍后要对数组进行赋值,“通过引用调用”在“按值调用”中进行转换。如果ASSIGNATION被省略,那么“参照呼叫”就是。
答
我需要改变阵列的长度!
这在Java中是不可能的。您可以使用动态数据结构,如java.util.List
接口的实现。
由于方法参数是局部变量,所以您的分配并不能帮助您,因为方法参数是局部变量,因此会引用原始对象。所以你的对象有两个引用,你只能改变你的方法中已知的引用。
Java使用按值调用,对于引用数据类型,值是引用的值(因此您可以获得对同一对象的引用)。
当你想改变一个数组时,你可以这样做。
public static int[] arrayTwiceAsBig(int[] original) {
int[] newOne = new int[original.length * 2);
System.arraycopy(original, 0, newOne, 0, original.length);
return newOne;
}
,并调用它像这样:
int[] myArray = {1,2,3};
myArray = arrayTwiceAsBig(myArray);
System.out.println(Arrays.toString(myArray));
你真正要做的是创建源阵列的新版本,代表某种形式的“变异”操作。所以,在你的方法中创建新的数组,并返回***它。然后,您可以将它分配给保存源数据的相同变量,或者更好地将其分配给具有更有意义名称的另一个变量。 – Perception