我试图一次插入5个数字以按升序创建数组,但我的第3个数字有问题,等等。测试是插入: 比第一个元素小的数字 比最后一个元素大的数字 第一个和最后一个元素之间的数字 数组中已有的数字 到目前为止,这是我的代码:
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
答案 0 :(得分:1)
这一行:
if ((numtoinsert<a[numberofelements]) || (numtoinsert==a[numberofelements]))
检查代码中是否有更大/更小的数字。
尽管如此,numberofelements
在每个特定的迭代中都是常量。
尝试再次循环 并遍历所有数组中的当前元素。
祝你好运!修改强>:
如下所述,上面提到的初始条件可能确实有效,如果数组已排序。然而,排序有点过时了。
这个for
循环:
for(int i=0;i<numberofelements;i++)
{
a[i]=a[i+1];
}
应该在数组中移动元素,使其成为有序元素。
但实际上,它会将所有元素向后移动一个位置,并删除第一个元素。
尝试将新值添加到数组中的正确位置,而不删除其他值。 bubble sort或any other sorting algorithm可以解决问题。
答案 1 :(得分:0)
您通过数组移动值的逻辑并不是那么好。
if ((numtoinsert<a[numberofelements]) || (numtoinsert==a[numberofelements]))
{
for(int i=0;i<numberofelements;i++)
{
a[i]=a[i+1];
}
}
首先,删除第二个条件,如果有相同值,则无需移动值;)[5; 5]和[5; 5]相同;)
然后这里有两个问题:
这是你应该做的:
如果新值(A)小于先前值(B)。然后,您需要将B移动到阵列的下一个单元格。然后再检查之前的值。
这是代码:
if (numtoinsert < a[numberofelements-1]) { //If the PREVIOUS value is bigger
int i = numberofelements; //start at the current index
//then read from right to left
// while not at the beginning (i > 0)
// AND the value is smaller than the value at the current position.
while(i > 0 && numtoinsert < a[i-1]) {
a[i] = a[i-1]; //Set the left value to the right.
i--; //Decrement the index
}
a[i] = numtoinsert; //Then add the new value to the
}
这是正确缩进的完整代码
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-1]) {
int i = numberofelements;
while(i > 0 && numtoinsert < a[i-1]) {
a[i] = a[i-1];
i--;
}
a[i] = numtoinsert;
} 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");
}