java – 按升序插入和排序

我试图一次插入5个数字按升序创建一个数组,但我的第三个数字有问题,等等.测试是插入:

比第一个元素小的数字

比最后一个元素大的数字

第一个和最后一个元素之间的数字

数组中已有的数字

到目前为止,这是我的代码:

import java.util.Scanner;
public class InsertInOrder {

    public static void main(String[] args) {
    Scanner input=new Scanner(System.in);
    int [] a=new int[5];
    int numberofelements=0;
    System.out.print("Number to insert: ");
    int numtoinsert=input.nextInt();
    if (numtoinsert!=0)
    {
        a[0]=numtoinsert;
        ++numberofelements;
        System.out.print("Array is now: ");
        System.out.println(a[0]);
    }
    while(numberofelements<a.length)
    {
        System.out.print("Number to insert: ");
        numtoinsert=input.nextInt();
       if ((numtoinsert<a[numberofelements]) || (numtoinsert==a[numberofelements]))
           {
              for(int i=0;i<numberofelements;i++)
              {
                  a[i]=a[i+1];
              }
           }
    else
    a[numberofelements]=numtoinsert;
    numberofelements++;
    System.out.print("Array is now: ");
    for(int i=0;i<numberofelements;i++)
        {
            System.out.print(a[i]+" ");
        }
      System.out.println();
    }
    System.out.print("\nArray is now full");
    }

}

我输出的代码:

Number to insert: 5
Array is now: 5
Number to insert: 2
Array is now: 5 2 
Number to insert: 7
Array is now: 5 2 7 
Number to insert: 4
Array is now: 5 2 7 4 
Number to insert: 5
Array is now: 5 2 7 4 5 

Array is now full

最佳答案 这一行:

if ((numtoinsert<a[numberofelements]) || (numtoinsert==a[numberofelements]))

检查代码中是否有更大/更小的数字.

尽管如此,每个特定迭代中的numberofelements仍然是常量.

再次尝试循环并遍历数组中的所有当前元素.

祝好运!

编辑:

如下所述,如果数组已排序,则上述初始条件可能实际上有效.然而,排序有点过时了.

这个for循环:

for(int i=0;i<numberofelements;i++)
          {
              a[i]=a[i+1];
          }

应该在数组中移动元素,使其成为有序元素.

但实际上,它只会向后移动所有元素,并删除第一个元素.

尝试将新值添加到数组中的正确位置,而不删除其他值. bubble sortany other sorting algorithm将成功.

点赞