同样一个数组,用scanner和用random输入,最后产生不同的结果

sloopf 2012-05-25 04:16:36
import java.util.*;

public class QuickSort {
public static void quicksort(int b,int e,int[] y){
if(b>=e)
return;
int m=partition(b,e,y);
quicksort(b,m-1,y);
quicksort(m+1,e,y);
}

public static int partition(int b,int e,int[] y){
int p=b;
int q=e;
int flag=e;
while(true){
while(y[p]<y[flag] && p<flag) p++;
while(y[q]>y[flag] && q>b) q--;
if(p>=q){
exch(p,flag,y);
return p;
}else
exch(p,q,y);
}
}

public static void exch(int b,int e,int[] y){
int storage=y[b];
y[b]=y[e];
y[e]=storage;
}

public static int[] RInt(int number){
Random random=new Random();
int[] arr=new int[number];
for(int i=0;i<arr.length;i++){
arr[i]=random.nextInt(1000);
}
return arr;
}

public static void main(String[] args){

// 用scanner输入
Scanner sc=new Scanner(System.in);
int length=sc.nextInt();
int[] arr=new int[length];
for(int i=0;i<length;i++)
arr[i]=sc.nextInt();
sc.close();

// 用random产生数组
/* int[] arr=RInt(40);
for(int i=0;i<arr.length;i++)
System.out.print(arr[i] + " ");
*/
System.out.println();
quicksort(0,arr.length-1,arr);
for(int i=0;i<arr.length;i++)
System.out.print(arr[i] + " ");
}
}

用scanner时
input
5
1 2 4 5 7

然后就一直不走了,只能ctrl+c强行终止

用random时
会出结果,并且正确排序

不知这两种输入为什么造成结果这么大的不同?
...全文
241 9 打赏 收藏 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
sloopf 2012-06-01
  • 打赏
  • 举报
回复
很奇怪,今天突然可以运行了,不知道为什么....总之谢了....
sloopf 2012-05-30
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]

把这句删了,sc.close();
5
1 2 4 5 7 接着按回车,应该就可以了。
[/Quote]

其实sc.close()是为了好看后来加上的,应该对原问题没什么影响

其实原来的问题是

Scanner sc=new Scanner(System.in);
int length=sc.nextInt();
int[] arr1=new int[length];
int[] arr2=new int[length];
for(int i=0;i<length;i++){
arr1[i]=sc.nextInt();
arr2[i]=sc.nextInt();
}

然后我在dos下输入
5
1 2
2 3
3 4
再继续输入就卡死了

在eclipse下倒是可以全部输完,打印两个数组也没问题,但到下一步(quicksort)就卡死了
sffx123 2012-05-30
  • 打赏
  • 举报
回复
Scanner方式运行正常。楼主是不是少输入数字了?
sdojqy1122 2012-05-30
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 的回复:]

引用 2 楼 的回复:

把这句删了,sc.close();
5
1 2 4 5 7 接着按回车,应该就可以了。


其实sc.close()是为了好看后来加上的,应该对原问题没什么影响

其实原来的问题是

Scanner sc=new Scanner(System.in);
int length=sc.nextInt();
int[] arr1=new int……
[/Quote]
表示没有出现卡死正常,能正确输出结果。
sindhrcc 2012-05-29
  • 打赏
  • 举报
回复
正常输入流是应该关的啊,就是因为数组初始化的时候小了,干什么建议人家不关输入流?
波杰克男 2012-05-25
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]

把这句删了,sc.close();
5
1 2 4 5 7 接着按回车,应该就可以了。
[/Quote]
++
流星陨落 2012-05-25
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]

把这句删了,sc.close();
5
1 2 4 5 7 接着按回车,应该就可以了。
[/Quote]
+1
sdojqy1122 2012-05-25
  • 打赏
  • 举报
回复
把这句删了,sc.close();
5
1 2 4 5 7 接着按回车,应该就可以了。
sindhrcc 2012-05-25
  • 打赏
  • 举报
回复
请仔细看看程序,你用scanner时输入的第一个数是数组的长度,你输入的是5当然输入5个数后就走不下去了

62,620

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧