Java 关于合并算法的问题

Java 关于合并算法的问题,java,algorithm,Java,Algorithm,嗨,我有个问题,我知道这个问题在某种程度上是毫无意义的,但让我们看看我有代码将两个排序数组合并到一个排序数组中,这里是java代码 public class Merge { public static void main(String[]args){ int a[]=new int[]{7,14,23,30,35,40}; int b[]=new int[]{5,8,9,11,50,67,81}; int c[]=new int[a.leng

嗨,我有个问题,我知道这个问题在某种程度上是毫无意义的,但让我们看看我有代码将两个排序数组合并到一个排序数组中,这里是java代码

public class Merge {

    public static void main(String[]args){

       int a[]=new int[]{7,14,23,30,35,40};
       int b[]=new int[]{5,8,9,11,50,67,81};
       int c[]=new int[a.length+b.length];
       int al=0;
       int bl=0;
       int cl=0;

       while (al<a.length && bl<b.length)              
          if (a[al]<b[bl])
              c[cl++]=a[al++];   
          else  
              c[cl++]=b[bl++];


       while (al<a.length)
          c[cl++]=a[al++];

       while (bl<b.length)
          c[cl++]=b[bl++];

       for (int j=0;j<c.length;j++){
          System.out.println(c[j]);
       }


    }
}
公共类合并{
公共静态void main(字符串[]args){
int a[]=新int[]{7,14,23,30,35,40};
int b[]=新int[]{5,8,9,11,50,67,81};
int c[]=新int[a.length+b.length];
int al=0;
int-bl=0;
int cl=0;

而(al如果您在使用合并排序算法时遇到问题,请查看Wiki文章。
此外,在发布代码时,最好给变量一个更具描述性的名称,并在
语句中添加大括号(
{}
),而
如果
语句如果合并排序算法有问题,请查看Wiki文章。

此外,在发布代码时,最好给变量一个更具描述性的名称,并在
中添加大括号(
{}
),而
如果
语句

则取决于括号的位置,当前代码相当于:

while (al<a.length && bl<b.length) {
    if (a[al]<b[bl]) {
       c[cl++]=a[al++];
    } else {
       c[cl++]=b[bl++];
    }
}

while(al这取决于括号的位置,您当前的代码相当于:

while (al<a.length && bl<b.length) {
    if (a[al]<b[bl]) {
       c[cl++]=a[al++];
    } else {
       c[cl++]=b[bl++];
    }
}

while(al如果我的猜测是正确的,那么你的问题是……为什么下面的代码不起作用

while (al<a.length && bl<b.length)
{ //<-- bracket here

    if (a[al]<b[bl])
      c[cl++]=a[al++];


     else  
     c[cl++]=b[bl++];


    while (al<a.length)
      c[cl++]=a[al++];

    while (bl<b.length)
     c[cl++]=b[bl++];
} //<--- Bracket here

while(al如果我的猜测是正确的,那么你的问题是……为什么下面的代码不起作用

while (al<a.length && bl<b.length)
{ //<-- bracket here

    if (a[al]<b[bl])
      c[cl++]=a[al++];


     else  
     c[cl++]=b[bl++];


    while (al<a.length)
      c[cl++]=a[al++];

    while (bl<b.length)
     c[cl++]=b[bl++];
} //<--- Bracket here

while(al一个好建议:始终用大括号围绕所有逻辑代码块:

if (expression) { 
   //some code 
}

if (expression) {
   //one line of code
} else {
   //another line
}

while (conditionIsTrue) {
   //just 1 line here but surrounded with curly braces 
}
它将帮助您避免在所有C风格语言中出现许多不明显的错误

如果您理解块中只有一行,并且为了使代码更具可读性而有意识地省略大括号,那么这些错误怎么会出现?非常简单!想象一下代码:

if (a > b) 
   result = a;
第一眼看上去更优雅

if (a > b) {
   result = a;
}
甚至

if (a > b)
{
   result = a;
}
但是现在让我们假设您想向代码中添加一些调试信息:

if (a > b)
   System.out.println ("a > b, we're inside if-block");
   result = a;                            //This line is ALWAYS executed

正如您所看到的,犯错误非常容易。因此,只要不要忽略大括号,事情就会变得容易得多。

一条好建议:始终用大括号围绕所有逻辑代码块:

if (expression) { 
   //some code 
}

if (expression) {
   //one line of code
} else {
   //another line
}

while (conditionIsTrue) {
   //just 1 line here but surrounded with curly braces 
}
它将帮助您避免在所有C风格语言中出现许多不明显的错误

如果您理解块中只有一行,并且为了使代码更具可读性而有意识地省略大括号,那么这些错误怎么会出现?非常简单!想象一下代码:

if (a > b) 
   result = a;
第一眼看上去更优雅

if (a > b) {
   result = a;
}
甚至

if (a > b)
{
   result = a;
}
但是现在让我们假设您想向代码中添加一些调试信息:

if (a > b)
   System.out.println ("a > b, we're inside if-block");
   result = a;                            //This line is ALWAYS executed

正如您所见,犯错误非常容易。因此,只要不要省略大括号,事情就会简单得多。

将代码粘贴到代码块中会非常好!发布问题时您应该更加小心,因为这是不可读的。单击“编辑”,选择您的代码,然后单击“101010”按钮,然后每次缩进正确回答。你的问题是什么?不清楚。投票结束——这里没有问题。@Closer:这里有一个问题,但不可否认,现在解决这个问题需要太多的努力。让提问者完成他的编辑,它应该会变得更清楚。将你的代码粘贴到代码块中会很好!你真的应该多加小心n发布问题,因为这是不可读的。单击“编辑”,选择您的代码,然后单击“101010”按钮,并正确缩进所有内容。您的问题是什么?不清楚。投票关闭--这里没有问题。@Closer:这里有一个问题,但必须承认,现在要解决它需要太多的努力。让asker完成他的任务编辑后,它应该会变得更清晰。@davit和你在这个位置插入了括号?或者其他任何地方?@davit和你在这个位置插入了括号?或者其他任何地方?@Andreas谢谢。更正:)@Andreas谢谢。更正:)