我创建了一个Java程序,它接受用户的选择,并创建一个这个大小的int数组。然后对数组进行排序和显示,并要求数字在数组中进行搜索。我尝试使用冒泡排序技术,结果总是变成一个降序数而不是升序数。
import java.util.*;
class mt {
int i,M=0;
public void main() {
Scanner sc=new Scanner(System.in);
System.out.println("enter the size of array");
int sizeOfArray=sc.nextInt();
int arr[]= new int [sizeOfArray];
int temp;
System.out.println("enter the numbers");
for (i=0; i<sizeOfArray; i++) {
arr[i]=sc.nextInt();
}
System.out.println("the sorted array is below :");
for ( i=0; i<sizeOfArray-1; i++){
for (int j=0; j<sizeOfArray-2; j++) {
if (arr[j]>arr[j+1]) {
temp=arr[j];
arr[j]=arr[j+1];
arr[j+1]=temp;
}
}
}
for (i=0; i<sizeOfArray; i++) {
System.out.print(arr[i]+" ");
}
System.out.println();
System.out.println("enter number to search");
int srch=sc.nextInt();
for (i=0; i<sizeOfArray; i++) {
if (arr[i]==srch)
{
System.out.println("found at "+i);
M++;
break;
}
else if (M==0&&i==sizeOfArray-1)
{
System.out.println("number not found");
}
}
}
}
答案 0 :(得分:1)
按以下方式更改循环和条件
for ( i=0; i<arr.length - 1; i++){
for (int j=i+1; j<arr.length; j++) {
if (arr[i]>arr[j]) {
temp=arr[i];
arr[i]=arr[j];
arr[j]=temp;
}
}
}
因此,您可以按升序获得结果数组。在您的情况下,当您从0迭代时,您缺少元素 - array.length - 2.
答案 1 :(得分:1)
首先,上面提到的代码有很多愚蠢的错误需要纠正: 1.需要在main()方法中添加“String args []”。 2.对于所有for循环,其中“i”是变量,需要将其定义为“int”。 3.变量“M”也需要定义。
现在,当我执行此代码的干运行时,产生的结果也不合适。 给出的输入如下: 输入数组的大小 五 输入数字 12 10 34 2 6 收到的产出如下: 排序数组如下: 2 10 12 34 6 输入要搜索的号码
现在输出不正确。 虽然它是按升序排列的......但最后一个元素仍会被遗漏。使用的双循环需要以不同的方式使用。请找到该部分中应包含的代码:
for (int i=0; i<=sizeArr; i++){
for (int j=0; j<sizeArr-1; j++) {
if (arr[j]>arr[j+1]) {
temp=arr[j];
arr[j]=arr[j+1];
arr[j+1]=temp;
}
}
}
我希望现在这对你有用。