A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© waltdev 中级黑马   /  2015-4-3 10:27  /  1572 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 waltdev 于 2015-4-3 12:00 编辑

在做基础测试题的时候,遇到考排序的题,我就想到用随机数构建一个数组,这样就不用每都要输入10个数了,第一个随机算法问题在于只能保证相邻的两个随机数不重复,不能保证数组中所有的随机数都不重复,后来想到用HashSet存储这样就不会重复了,可是我在把HashSet存到arr数组中的时候,arr=(int[])sets.toArray();也就是这行,编译没法通过,我看了API,toArray方法是返回了一个Object类型的数组啊,强转(int[])没生效,百度了找不到方法,大家看看怎么解决
  1. package com.itheima;

  2. import java.util.HashSet;
  3. import java.util.Iterator;
  4. import java.util.Random;
  5. import java.util.Set;

  6. /**
  7. * @author walmand_
  8. * 第四题:请列举您了解的一些排序算法,并用Java语言实现一个效率较高的。
  9. * 了解的一些排序:选择排序,冒泡排序,快速排序,插入排序
  10. */
  11. public class Test4 {
  12.         
  13.         public static void main(String[] args) {
  14.                 //用Random类生成随机数,不过有重复的风险,下面用两个变量解决
  15.                 Random r = new Random();
  16.                 int[] arr = new int[10];
  17.                 //last变量保存上一个随机数,nextInt(100)返回的是100以内的随机数
  18.                 int last = r.nextInt(100);
  19.                 int temp = 0;
  20.                 for (int i = 0; i < arr.length; i++) {
  21.                         //temp变量保存现在的随机数,用它和上一个随机数last比,看生成的随机数是否一样
  22.                         temp = r.nextInt(100);
  23.                         if (temp!=last) {
  24.                                 //如果生产的随机数不一样那么就存入数组
  25.                                 arr[i] = temp;
  26.                         }
  27.                         last = temp;
  28.                 }
  29.                 System.out.println("排序前的数组");
  30.                 printArr(arr);
  31.                 bubbleSort(arr);
  32.                 System.out.println("");
  33.                 System.out.println("排序后的数组");
  34.                 printArr(arr);
  35.         }
  36.         private static int[]  getRandom() {
  37.                 Set<Integer> sets=new HashSet<Integer>();
  38.                 int[] arr = new int[10];

  39.                 boolean flag=true;
  40.                                 while(true){
  41.                                         int z=(int)(Math.random()*100+1);
  42.                                         flag=sets.add(z);
  43.                                         if(!flag){
  44.                                                 continue;
  45.                                         }
  46.                                         if(sets.size()>=10){
  47.                                                 break;
  48.                                         }
  49.                                        
  50.                                 }
  51.                                 System.out.println(sets);
  52.                                 arr=(int[])sets.toArray();//这行编译不通过
  53.                                 
  54.                         return  arr;
  55.         }
  56.         
  57.         /**
  58.          * 打印数组方法
  59.          */
  60.         private static void printArr(int[] array) {
  61.                 for (int i = 0; i < array.length; i++) {
  62.                         System.out.print(array[i]+"\t");
  63.                 }
  64.                
  65.         }
  66.         /**
  67.          * 冒泡排序
  68.          */
  69.         private static void bubbleSort(int[] array) {
  70.                 for (int i = 0; i < array.length; i++) {
  71.                         for (int j = i + 1; j < array.length; j++) {
  72.                                 if (array[i] > array[j]) {
  73.                                         int temp = array[i];
  74.                                         array[i] = array[j];
  75.                                         array[j] = temp;
  76.                                 }
  77.                         }
  78.                 }
  79.         }
  80.         
  81. }
复制代码
问题已经解决,全部代码贴上来
游客,如果您要查看本帖隐藏内容请回复




评分

参与人数 1技术分 +1 收起 理由
lwj123 + 1 很给力!

查看全部评分

7 个回复

倒序浏览
自顶自顶,求解决
回复 使用道具 举报
Integer arr=sets.toArray(new Integer[sets.length]);
当定义长度不够时,会自动产生新的数组来接收。

评分

参与人数 1黑马币 +4 收起 理由
waltdev + 4 谢谢哥们,厉害啊

查看全部评分

回复 使用道具 举报
剑雨飘扬 发表于 2015-4-3 11:05
Integer arr=sets.toArray(new Integer[sets.length]);
当定义长度不够时,会自动产生新的数组来接收。 ...

谢谢哥们,解决了,修正一下,求Set的长度是size()方法
回复 使用道具 举报
剑雨飘扬 发表于 2015-4-3 11:05
Integer arr=sets.toArray(new Integer[sets.length]);
当定义长度不够时,会自动产生新的数组来接收。 ...

定义一个Integer类型的数组,长度为sets.size(),再用一个array数组保存
  1.                 Integer[] arr = sets.toArray(new Integer[sets.size()]);
  2.                 int[] array = new int[10];
  3.                 for (int i = 0; i < arr.length; i++) {
  4.                         array[i] = arr[i].intValue();
  5. //                        System.out.println(array[i] + "");
  6.                 }
复制代码
回复 使用道具 举报
waltdev 发表于 2015-4-3 11:42
定义一个Integer类型的数组,长度为sets.size(),再用一个array数组保存

Integer直接用就行了,跟int是一样的
回复 使用道具 举报
本帖最后由 waltdev 于 2015-4-3 11:59 编辑

:handshake:handshake:handshake:handshake
回复 使用道具 举报
剑雨飘扬 发表于 2015-4-3 11:49
Integer直接用就行了,跟int是一样的

:lol可以,不过我这个程序打印方法和排序方法接收的都是int[]数组,所以转一下比较方便
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马