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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 刘_鑫 中级黑马   /  2013-6-26 00:04  /  2989 人查看  /  20 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 孙百鑫 于 2013-6-30 08:21 编辑

如何随机获得数组String s[] = {"abc1","abc2","abc3","abc4","abc5"};中的字符串打印出来,并且不重复。

评分

参与人数 1技术分 +1 收起 理由
刘凯 + 1 赞一个!

查看全部评分

20 个回复

正序浏览
楼主您好,帖子长时间没有动态我已经将您的帖子改成已解决。如有问题请私密我哦~
回复 使用道具 举报
学习了,呵呵
回复 使用道具 举报
王靖远 发表于 2013-6-26 12:23
递归效率也低,能不用则不用吧,不过这种思想还是要掌握的。

嗯,其实有种叫“尾递归”的技术,据说可以改进递归的效率,有兴趣可以去了解下。
回复 使用道具 举报
L.I.F.E 发表于 2013-6-26 09:27
就是说 如果你想遍历一个集合或一个数组 ,采用增强for循环。

明白了谢谢
回复 使用道具 举报
秩宇 发表于 2013-6-26 12:13
我们算法老师说,能用迭代最好不用递归,因为要考虑栈溢出。所以我一般很少写递归。 ...

递归效率也低,能不用则不用吧,不过这种思想还是要掌握的。
回复 使用道具 举报
王靖远 发表于 2013-6-26 12:01
这样也可以,方法大同小异,有思路就好了,我用递归做的。

我们算法老师说,能用迭代最好不用递归,因为要考虑栈溢出。所以我一般很少写递归。
回复 使用道具 举报
秩宇 发表于 2013-6-26 11:31
有种更加简洁的方法这个是在《编程珠玑》上看到的,原题是说:如何获得一万个不重复的电话号码? 解题思 ...

这样也可以,方法大同小异,有思路就好了,我用递归做的。
回复 使用道具 举报
王靖远 发表于 2013-6-26 01:16
import java.util.*;
class Random{
        public static void main(String[] args){

有种更加简洁的方法
  1. class RandomTest {
  2.         public static void main(String[] args) {
  3.                 String s[] = { "abc1", "abc2", "abc3", "abc4", "abc5" };
  4.                 String s2[] = s;                                                                                //拷贝一份字符串
  5.                 Random ran = new Random();       
  6.                 for (int i = 0; i < s2.length;) {                                                //计数器在循环中根据条件改变
  7.                         int index = ran.nextInt(s2.length);                                       
  8.                         if (!s2[index].isEmpty()) {                                                        //判断是随机到的下标对应值是否为空
  9.                                 System.out.println(s2[index]);                                        //输出值并把对应值设为空
  10.                                 s2[index] ="";                                                                        //自增计数器
  11.                                 i++;
  12.                         }

  13.                 }

  14.         }
  15. }
复制代码
这个是在《编程珠玑》上看到的,原题是说:如何获得一万个不重复的电话号码? 解题思路就是,先有序的输出一个电话号码列表,然后随机的去取其中的某个号码,并且在取出后删除这个号码。

评分

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

查看全部评分

回复 使用道具 举报
王靖远 发表于 2013-6-26 11:14
这是高级for循环,学到后面毕老师会说哦。这种for循环有局限性只能遍历。比普通for循环少了个变量。 ...

哦,谢谢。我再往后看看那教程。
回复 使用道具 举报
王广亚 发表于 2013-6-26 08:57
这里的for (Object str : news2) 不明白,这是一个普通的for循环语句吗?最简单的for语句不是for(;;);这 ...

这是高级for循环,学到后面毕老师会说哦。这种for循环有局限性只能遍历。比普通for循环少了个变量。
回复 使用道具 举报
用随机函数Random     详细信息查API
回复 使用道具 举报
王广亚 发表于 2013-6-26 09:10
谢谢你的解答,但是还是不明白怎样循环的,能详细点吗?

就是说 如果你想遍历一个集合或一个数组 ,采用增强for循环。
  1. int[] arr = new int[]{1,2,3,4,5};
  2. //增强for
  3. for(int i : arr){
  4.     System.out.println(i);
  5. }
  6. //传统for
  7. for(int i = 0; i < arr.length; i++){
  8. System.out.println(arr[i]);
  9. }
复制代码
回复 使用道具 举报
L.I.F.E 发表于 2013-6-26 09:03
这是增强for循环!
格式:
for(type 变量名:集合变量名){... ...}

谢谢你的解答,但是还是不明白怎样循环的,能详细点吗?
回复 使用道具 举报
王广亚 发表于 2013-6-26 08:57
这里的for (Object str : news2) 不明白,这是一个普通的for循环语句吗?最简单的for语句不是for(;;);这 ...

这是增强for循环!
格式:
for(type 变量名:集合变量名){... ...}
回复 使用道具 举报

这里的for (Object str : news2) 不明白,这是一个普通的for循环语句吗?最简单的for语句不是for(;;);这样写的吗?
回复 使用道具 举报

原来如此啊 随机获取 不错!赶紧保存下来:)
回复 使用道具 举报
  1. import java.util.*;

  2. class Random {
  3.         public static void main(String[] args) {
  4.                 Object s[] = { "abc1", "abc2", "abc3", "abc4", "abc5" };
  5.                 method(s);

  6.         }

  7.         public static void method(Object[] news2) {
  8.                 if (news2.length == 0)
  9.                         return;
  10.                 List<Object> list = new ArrayList<Object>();
  11.                 for (Object str : news2) {
  12.                         list.add(str);
  13.                 }
  14.                 int len = list.size();
  15.                 int x = (int) (Math.random() * len);

  16.                 Object str = list.remove(x);
  17.                 System.out.println(str);
  18.                 Object[] news = null;
  19.                 news = list.toArray();

  20.                 method(news);

  21.         }
  22. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
刘凯 + 1

查看全部评分

回复 使用道具 举报
贾永长 发表于 2013-6-26 00:38
运行结果:五个for循环解决问题!

import java.util.*;
class Random{
        public static void main(String[] args){
                String s[] = {"abc1","abc2","abc3","abc4","abc5"};
                method(s);
               
       
        }
        public  static void method(Object[] news2){
                if(news2.length==0)
                        return;
                List<Object>list = new ArrayList<Object>();
                for(Object str : news2)
                {
                        list.add(str);
                }
                int len = list.size();
                int x = (int)(Math.random()*len);
//                System.out.println(x);
                Object  str = list.remove(x);
                System.out.println(str);
                Object[] news =null;
                news = list.toArray();
//                for(Object obj :news)
//                {
//                        System.out.println(obj);
//                }
                method(news);
               
               
               
        }
}
这个可以随机获取哦
回复 使用道具 举报
贾永长 发表于 2013-6-26 00:38
运行结果:五个for循环解决问题!

你这不是随机获取吧。
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 加入黑马