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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© haio 中级黑马   /  2014-6-12 19:14  /  2019 人查看  /  9 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 haio 于 2014-6-15 14:37 编辑
  1. package com.isoftstone.interview.bank;

  2. import java.util.ArrayList;
  3. import java.util.List;
  4. import java.util.Random;

  5. public class RandomTest {
  6.         public static void main(String[] args) {
  7.                 for (int i = 0; i < 100; i++) {
  8.                         
  9.                         getNum(4);
  10.                 }
  11.         }
  12.         public static void getNum(int num){
  13.                 List<Character> l = new ArrayList<Character>();;
  14.                 mi:for (int i = 0; i < num; i++) {
  15.                         
  16.                         Random r = new Random();
  17.                         String s = "0123456789";
  18.                         int len = s.length();
  19.                         int a = r.nextInt(len);
  20.                         l.add(s.charAt(a));
  21.                         
  22.                         s=s.replace(s.charAt(a)+"", "");
  23.                 }
  24.                 for (Character character : l) {
  25.                         System.out.print(character);
  26.                 }
  27.                 System.out.println();
  28.         }
  29. }
复制代码
求高手解决第一位出现0的问题?

9 个回复

倒序浏览
本帖最后由 shi980088 于 2014-6-12 21:31 编辑

package cn.itcast.test;

import java.util.ArrayList;

public class Text {
        public static void main(String[] args) {
                for (int i = 0; i < 100; i++) {
                        getNum(4);
                }
        }

        public static void getNum(int num) {                           
                int a = 9 * (int) Math.pow(10, num - 1);               //如果num=4的话,这里就是9000,如果是5的话就是90000,以此类推
                int b = (int) Math.pow(10, num - 1);                    //如果num=4的话,这里就是1000,如果是5的话就是10000,以此类推
                System.out.println((int) (Math.random() * a) + b);
        }
}
你看看我的这个方法行不行,也能达到你的目的,你写的第一个数字如果是0的话不好处理
回复 使用道具 举报
shi980088 发表于 2014-6-12 21:29
package cn.itcast.test;

import java.util.ArrayList;

哦,我没有说清楚,题是这样的:随机产生一个不重复的四位数,
回复 使用道具 举报
首先你要把你的String s = "0123456789";提到for循环外面,其次把String s = "0123456789";改为String s = "1234567890";然后在for循环内做个判断,if(i==0){a = r.nextInt(9);}else{a = r.nextInt(len);}
回复 使用道具 举报
解决方法见代码中的注释:
  1. import java.util.ArrayList;
  2. import java.util.List;
  3. import java.util.Random;

  4. public class RandomTest {
  5.         public static void main(String[] args) {
  6.                 for (int i = 0; i < 100; i++) {
  7.                        
  8.                         getNum(4);
  9.                 }
  10.         }
  11.         public static void getNum(int num){
  12.                 List<Character> l = new ArrayList<Character>();
  13.                 boolean f = false;
  14.                 for (int i = 0; i < num;) {
  15.                        
  16.                         Random r = new Random();
  17.                         String s = "0123456789";
  18.                         int len = s.length();
  19.                     
  20.                         int a = r.nextInt(len);
  21.                       //未出现非零数字则进行下一次循环,否则标志位置位,不在执行此代码
  22.                         if(a == 0 && !f){
  23.                                 continue;
  24.                         }
  25.                         f = true;
  26.                         
  27.                         l.add(s.charAt(a));
  28.                         i++;
  29.                        
  30.                         //s=s.replace(s.charAt(a)+"", "");  这句是多余的                     
  31.                 }
  32.                 for (Character character : l) {
  33.                         System.out.print(character);
  34.                 }
  35.                 System.out.println();
  36.         }
  37. }
复制代码
回复 使用道具 举报
把你的getNum函数优化了下:
回复 使用道具 举报
屈_zi 中级黑马 2014-6-15 10:55:27
7#
  1.         public static void getNum(int num){
  2.                     Random r = new Random();               
  3.                 StringBuffer l = new StringBuffer();
  4.                 boolean f = false;
  5.                
  6.                 for (int i = 0; i < num;) {                        
  7.                         int a = r.nextInt(10);
  8.                       //未出现非零数字则进行下一次循环,否则标志位置位,不在执行此代码
  9.                         if(!f){
  10.                                 if(a == 0){
  11.                                         continue;
  12.                                 }else{
  13.                                         f = true;
  14.                                 }
  15.                         }
  16.                         
  17.                         l.append(a);                     
  18.                         i++;                                          
  19.                 }
  20.                 System.out.println(l);
  21.         }
复制代码
回复 使用道具 举报
haio 中级黑马 2014-6-15 14:32:32
8#
yuZhe_toString 发表于 2014-6-15 09:18
首先你要把你的String s = "0123456789";提到for循环外面,其次把String s = "0123456789";改为String s =  ...

还是这种方案简单,谢谢啊!
回复 使用道具 举报
haio 中级黑马 2014-6-15 14:36:44
9#
屈_zi 发表于 2014-6-15 10:38
解决方法见代码中的注释:

这样是把第一位的0去掉了可是如果第二三四位上是0的话也没法执行到了,(要考虑每一位上的数不重复的)不过还是谢谢啊!还优化代码!真心感谢!!
回复 使用道具 举报
Wokno 中级黑马 2014-6-15 19:10:27
10#
路过看看。。。。。。。。。。。。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马