我正在制作一个带有2个数组并将它们加在一起的方法。 (我是一个新手,这是一个学校作业,我已经了解到有些人不喜欢在这里看到学校的问题。但我已经做了很多工作,我现在只是被卡住了。)
public static int[] Concat(int[] array1, int[] array2) //array1 = 1, 2, 3, 4, 5 array2 = 6, 7, 8, 9, 10.
{
int i = array1.Length + 1;
int[] array3 = new int[array1.Length + array2.Length];
Class1.CopyTo(array1, array3, 0);
Class1.CopyTo(array2, array3, i);
Class1.PrettyPrint(array3);
return array3;
}
在这个方法中我指的是我之前做过的其他两种方法:
public static int[] CopyTo(int[] arr1, int[] arr2, int start)
{
for(int i = 0; i < arr1.GetLength(0); i++)
{
if (start <= i)
{
arr2[i] = arr1[i];
}
}
return null;
}
这个用于将数组的索引复制到另一个数组中。 start变量是我首先开始复制的索引。
public static int[] PrettyPrint(int[] intArray)
{
string result = string.Join(", ", intArray);
Console.WriteLine(result);
return null;
}
这会在字符串中打印出一个数组。
问题在于Concat方法。它适用于第一个副本。我将array1复制到array3。
Class1.CopyTo(array1, array3, 0);
但是对于第二个数组,它没有添加任何内容,而且只需输入字符串即可得到:
1,2,3,4,5,0,0,0,0,0。
我不明白为什么只有第一份副本才有效。
也是一个跟进问题。
在我的主程序选项卡中,我无法再使用类Class1 lab2 = new Class1();
的实例引用这些方法。但是我不得不通过使用Class1而不是lab2(它适用于我的其他方法)来调用它们。
为了能够在同一个类中的另一个方法内调用一个方法,我必须添加“static”,并且通过添加“static”,我不得不改变我在主程序选项卡中调用方法的方式。
我真的不明白为什么我必须首先添加“静态”,然后改变我调用方法的方式。为什么我必须更改被调用为静态的2个方法?为什么我不能用实例lab2调用那些改变的方法?
很抱歉这个问题很长!
答案 0 :(得分:1)
您没有复制第二个数组的原因是因为CopyTo
方法仅在arr2
时检查并复制到i >= start
,这在start
时不会发生}大于arr1
长度,这是第二个数组array2
的情况。
您必须进行2次更改才能使其正常工作:
Concat
方法中的 1:,将+ 1
移至int i = array1.Length + 1;
(第二个CopyTo
的起始参数)。你没有任何额外的整数:
public static int[] Concat(int[] array1, int[] array2) //array1 = 1, 2, 3, 4, 5 array2 = 6, 7, 8, 9, 10.
{
int i = array1.Length; // + 1;
int[] array3 = new int[array1.Length + array2.Length];
Class1.CopyTo(array1, array3, 0);
Class1.CopyTo(array2, array3, i);
Class1.PrettyPrint(array3);
return array3;
}
在CopyTo
中 2:,删除循环内的if
语句,然后使用arr2
添加到start
进行调整,像这样复制到arr2
的正确索引:
public static int[] CopyTo(int[] arr1, int[] arr2, int start)
{
for (int i = 0; i < arr1.GetLength(0); i++)
{
arr2[start + i] = arr1[i];
/*if (start <= i)
{
arr2[i] = arr1[i];
}*/
}
return null;
}
现在你得到了正确的结果数组:
1, 2, 3, 4, 5, 6, 7, 8, 9, 10
修改强>
对于您的后续问题,您不能直接向类调用任何方法,除非这些方法是静态方法。您必须创建并初始化类的对象以调用常规方法。 Class1
是您的班级,lab2
是Class1
班级的对象。您可以将常规方法调用到对象lab2
,但不能将方法调用到其类Class1
,除非这些方法是静态定义的。有关静态方法的更多信息,请查看以下链接:
Java: when to use static methods
Static Classes and Static Class Members (C# Programming Guide)
答案 1 :(得分:0)
您还可以使用两个索引,一个是sourceIndex,另一个是targetIndex。这将大大简化事情
插图:
public static int[] CopyTo(int[] arr1, int[] arr2, int startSource, int startTarget)
{
int index = startTarget;
for (int i = startSource; i < arr1.GetLength(0); i++)
{
arr2[index++] = arr1[i];
}
return null;
}
public static int[] Concat(int[] array1, int[] array2) //array1 = 1, 2, 3, 4, 5 array2 = 6, 7, 8, 9, 10.
{
int i = array1.Length + 1;
int[] array3 = new int[array1.Length + array2.Length];
Class1.CopyTo(array1, array3, 0,0);
Class1.CopyTo(array2, array3, 0, array1.Length);
Class1.PrettyPrint(array3);
return array3;
}
// Unchanged
public static int[] PrettyPrint(int[] intArray)
{
string result = string.Join(", ", intArray);
Console.WriteLine(result);
return null;
}