为什么用此方法输出的索引为零元素结果值为一直为零,是不是冒泡排序的问题?
问题描述:
package 方法; import java.util.Arrays; public class 双色球 { public static void main(String[] args) { sh(); } public static void sh() { int[] arr = new int[7]; int b = (int) (Math.random() * 16) + 1; for (int i = 0; i < arr.length - 1; i++) { int a = (int) (Math.random() * 33 + 1); arr[i] = a; } for (int n = 0; n <= 5; n++) { for (int m = 0; m <= 5 - n; m++) { if (arr[m] > arr[m + 1]) { int temp = arr[m]; arr[m] = arr[m + 1]; arr[m + 1] = temp; } } } arr[arr.length - 1] = b; System.out.println(Arrays.toString(arr)); } }
答
你这是排完序了才给arr[6]赋值,本来的arr[6]就是0排完序后放在a[0]了你的
for (int i = 0; i < arr.length - 1; i++) {
int a = (int) (Math.random() * 33 + 1);
arr[i] = a;
}只生成a[0]到a[5],a[6]为0
答
冒泡没啥问题啊。你调试看看arr[0]是啥
答
int[] arr = new int[7];等价于 int[] arr={0,0,0,0,0,0,0};
for (int i = 0; i < arr.length - 1; i++) {}便利了0,1,2,3,4,5,当等于6的时候,不符合6<7-1,也就是arr变成了arr={x,x,x,x,x,x,0};
Math.random()返回[0.0,1.0)之间的数
(int) (Math.random() * 33 + 1)表示[1,34)当然大于0,所以第6位索引永远放在第一个位置,第一个值当然永远是0.
答
您好,我是有问必答小助手,您的问题已经有小伙伴解答了,您看下是否解决,可以追评进行沟通哦~
如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~
ps:问答VIP仅需29元,即可享受5次/月 有问必答服务,了解详情>>>https://vip.csdn.net/askvip?utm_source=1146287632
答
非常感谢您使用有问必答服务,为了后续更快速的帮您解决问题,现诚邀您参与有问必答体验反馈。您的建议将会运用到我们的产品优化中,希望能得到您的支持与协助!
速戳参与调研>>>https://t.csdnimg.cn/Kf0y