我对这段代码有点麻烦。请帮助。
我正在尝试编写一个代码来按升序合并两个数组。我已经编写了数据成员和函数来按升序对两个数组进行排序。
现在我不知道如何编写可以输入两个数组然后将它们作为对象传递给arrange()方法的main方法。有人请说明在这种情况下如何编写main方法。
我已经尝试了很长时间但是所有这些都导致了错误。我实际上只是自己开始学习java,所以请不要介意我的问题听起来很愚蠢。谢谢你们!
public class MergeArrays
{
int a1[];int size;
MergeArrays(int n)
{
size=n;
a1=new int[n];
}
void arrange(MergeArrays obj)
{
int answer[]=new int[obj.a1.length+a1.length];
int i,j,k=0;
while(i<size && j<obj.size)
{
if(a1[i]>obj.a1[j])
{
answer[k++]=obj.a1[j++];
}
else
{
answer[k++]=a1[i++];
}
}
while(i<size)
{
answer[k++]=a1[i++];
}
while(j<size)
{
answer[k++]=obj.a1[j++];
}
}
}
答案 0 :(得分:0)
还记得老Java程序员的口头禅吗?如果您没有将其视为public static void main( String args[])
,那么这可能就是您的问题。如果你想做一个运行一次的简单命令行程序,将两个数组合并在一起,使最终数组按升序排列,那么你必须抓住String args[]
。当从命令行运行程序时,它会给出一组(空格分隔的)参数,通常用a表示 - 后跟一些字母。程序抓住这些的方式是通过String args[]
主要或类似的机制,如果它是在另一种语言。为了正确使用这些,您需要假设某种类型的格式,以便您区分第一个数组的结尾和第二个数组的开头。一种可能的方法是期望每个数组都是单个参数,由每个元素的逗号分隔值组成。在启动程序的命令末尾,运行它的格式为"1,2,3,4,5" "6,7,8,9,0"
。然后,您可以使用String.split(",")
将每个字符串拆分,然后您将使用两个数组。另一种方法是期望1 2 3 4 5 6 7 8
的格式,除了使用特殊的字符串来表示第一个数组的结尾,更像是1 2 3 4 break 5 6 7 8
,在这种情况下,你只需要遍历,添加值到第一个数组,直到你达到休息,然后把剩下的放在第二个数组。
答案 1 :(得分:0)
如果要对两个数组进行排序,请使用接收两个参数的方法并返回合并的数组。所以你的主要课程应该是......
public static void main(String[] args) {
int[] array1 = {9,7,5,3,1};
int[] array2 = {2,4,6,8,10};
int[] merge = Merge.merge(array1, array2);
System.out.println(merge);
}
请注意合并类,并在我的示例中使用 merge 方法
答案 2 :(得分:0)
我通过对代码的最小更改来完成此工作。就像你拥有它一样,最好在一个单独的类中创建一个main方法,并在那里创建两个MergeArrays
对象。
请注意,您的算法仅适用于两个已排序的数组。
我将MergeArrays
构造函数更改为varargs
以初始化每个对象中的数组。
public class Test{
public static void main(String[] args){
//create two MergeArrays objects
MergeArrays obj1 = new MergeArrays(1, 5, 10, 15, 20);
MergeArrays obj2 = new MergeArrays(3, 7, 13, 18, 23);
//get answer from arrange()
int[] answer = obj1.arrange(obj2);
//print the answer
for (int i = 0; i < answer.length; i++){
System.out.println(answer[i]);
}
}
}
public class MergeArrays
{
int a1[];int size;
//used varargs here to send in the array
MergeArrays(Integer... args)
{
size=args.length;
a1=new int[size];
//initialize
for (int i = 0; i < size; i++){
a1[i] = args[i];
}
}
int[] arrange(MergeArrays obj)
{
int answer[]=new int[obj.a1.length+a1.length];
int i = 0; //initialize
int j = 0; //initialize
int k=0;
while(i<size && j<obj.size)
{
if(a1[i]>obj.a1[j])
{
answer[k++]=obj.a1[j++];
}
else
{
answer[k++]=a1[i++];
}
}
while(i<size)
{
answer[k++]=a1[i++];
}
while(j<size)
{
answer[k++]=obj.a1[j++];
}
return answer; //add this
}
}
输出:
1
3
5
7
10
13
15
18
20
23