请教大家一个程序 本帖最后由 java2000_net 于 2008-08-05 16:22:16 编辑 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 for (int j = 0; j < b.length-1; j++) if (b[j] > b[j + 1]) { int temp = b[j]; b[j] = b[j + 1]; b[j + 1] = b[j]; } 这个用来干么的?不如直接搜最小数字的下标,何必换来换去,而且这样换是不能保证b[0]是最小的 提供我的想法 利用冒泡排序的第一次循环 可以知道 总是将最大的一个数置于数组的最后一个 弹出他 同时生成一个不包括上一个数组最大值的数组 一次递归下去...public class Find5Max { public static void find5Max (int[] intArray, int iteratorNum){ if (iteratorNum < 1) return; for (int i=0; i<intArray.length-1; i++){ if (intArray[i] > intArray[i+1]){ int temp = intArray[i+1]; intArray[i+1] = intArray[i]; intArray[i] = temp; } } System.out.print(intArray[intArray.length-1] +" "); int[] tempArray = new int[intArray.length-1]; for (int i=0; i<intArray.length-1; i++) tempArray[i] = intArray[i]; find5Max(tempArray, iteratorNum-1); } public static void main(String args[]){ int[] intArray = {3, 1, 4, 2, 5, 7, 6, 9, 8, 10}; find5Max(intArray, 5); }}10 9 8 7 6 [color=#FF0000]for (int i = 5; i < a.length - 1; i++) {color]就是这条语句的问题~~首先不应该减1,a.length就是你输入的总的个数其次if (b[j] > b[j + 1]) { int temp = b[j]; b[j] = b[j + 1]; //b[j + 1] = b[j]; b[j+1] = temp; //这样才交换了} 没关系,只是看你用到了Arrays.copyOf()这个API了~~ 呵呵,这个你说的temp的地方我开始复制到论坛里的时候程序就那样写,可是晚上我检查后发现不对,所以写回来了,但是还是不成功,而且论坛也不能让我编辑帖子了其实我问题后来自己解决了,关键不在于这个temp,而是在这个b[]怎么保证b[0]一定是最小的,我原来写的方法不能完全保证b[0]是最小的,一旦原先的b[0]或者是b[1]中有一个最小才会出现我的结果,不然b[0]就不保证是最小的应该写成 for (int j = b.length - 1; j > 0; j--) { if (b[j] < b[j - 1]) { int temp = b[j]; b[j] = b[j - 1]; b[j - 1] = temp; }要倒过来比,不能正过来比现在我已经自行解决了,感谢大家的热心解答先给出我完整的代码,加上3楼朋友的方法,一共2种方法,大家可以分享下,觉得哪个好就用哪个,呵呵。当然或许大家也有更好的方法,也请大家不吝指教package GetMax;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.util.Arrays;class GetMax { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String c = br.readLine(); String str[] = c.split(","); int[] a = new int[str.length]; for (int i = 0; i < a.length; i++) a[i] = Integer.parseInt(str[i]); for (int i = 0; i < a.length; i++) System.out.print(a[i] + " "); System.out.println(); int[] b = new int[5]; b = Arrays.copyOf(a, 5); for (int i = 0; i < b.length; i++) System.out.print(b[i] + " "); System.out.println(); for (int i = 5; i < a.length; i++) { for (int j = b.length - 1; j > 0; j--) { if (b[j] < b[j - 1]) { int temp = b[j]; b[j] = b[j - 1]; b[j - 1] = temp; } } if (a[i] > b[0]) b[0] = a[i]; } for (int i = 0; i < b.length; i++) System.out.print(b[i] + " "); }} Java里调用C++ swing网络编程 Java------程序人生----路漫漫其修远兮 [求助]一个线程wait()以后,如果同一对象没有其他线程还能唤醒吗? 初始化順須包括構造方法的調用順序 关于Checkbox 的问题,getStateChange()出了什么问题, Java实现局域网聊天软件分享 + 散分 普通的字符串数组排序,有什么简单的办法? 我是初学者,请帮忙 能看看我的RIM问题吗? 高分 有关字符串转换为数的问题? javabean与数据库操作
for (int j = 0; j < b.length-1; j++)
if (b[j] > b[j + 1]) {
int temp = b[j];
b[j] = b[j + 1];
b[j + 1] = b[j];
}
这个用来干么的?不如直接搜最小数字的下标,何必换来换去,而且这样换是不能保证b[0]是最小的
public static void find5Max (int[] intArray, int iteratorNum){
if (iteratorNum < 1)
return;
for (int i=0; i<intArray.length-1; i++){
if (intArray[i] > intArray[i+1]){
int temp = intArray[i+1];
intArray[i+1] = intArray[i];
intArray[i] = temp;
}
}
System.out.print(intArray[intArray.length-1] +" ");
int[] tempArray = new int[intArray.length-1];
for (int i=0; i<intArray.length-1; i++)
tempArray[i] = intArray[i];
find5Max(tempArray, iteratorNum-1);
}
public static void main(String args[]){
int[] intArray = {3, 1, 4, 2, 5, 7, 6, 9, 8, 10};
find5Max(intArray, 5);
}
}10 9 8 7 6
就是这条语句的问题~~首先不应该减1,a.length就是你输入的总的个数其次if (b[j] > b[j + 1]) {
int temp = b[j];
b[j] = b[j + 1];
//b[j + 1] = b[j];
b[j+1] = temp; //这样才交换了
}
没关系,只是看你用到了Arrays.copyOf()这个API了~~
if (b[j] < b[j - 1]) {
int temp = b[j];
b[j] = b[j - 1];
b[j - 1] = temp;
}
要倒过来比,不能正过来比现在我已经自行解决了,感谢大家的热心解答
先给出我完整的代码,加上3楼朋友的方法,一共2种方法,大家可以分享下,觉得哪个好就用哪个,呵呵。当然或许大家也有更好的方法,也请大家不吝指教
package GetMax;import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;class GetMax {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String c = br.readLine();
String str[] = c.split(",");
int[] a = new int[str.length];
for (int i = 0; i < a.length; i++)
a[i] = Integer.parseInt(str[i]); for (int i = 0; i < a.length; i++)
System.out.print(a[i] + " ");
System.out.println(); int[] b = new int[5];
b = Arrays.copyOf(a, 5);
for (int i = 0; i < b.length; i++)
System.out.print(b[i] + " ");
System.out.println(); for (int i = 5; i < a.length; i++) {
for (int j = b.length - 1; j > 0; j--) {
if (b[j] < b[j - 1]) {
int temp = b[j];
b[j] = b[j - 1];
b[j - 1] = temp;
}
}
if (a[i] > b[0])
b[0] = a[i];
} for (int i = 0; i < b.length; i++)
System.out.print(b[i] + " ");
}
}