一道Java编程题 通过继承java.Util.Random类设计一个类RandomEX,并实现
通过继承java.Util.Random类设计一个类RandomEX,并实现以下功能:
1.添加方法:String nextBinaryString (int n)和 String nextHexString (int n),分别用于产生固定长度为n的二进制和十六进制字符串
2.添加方法: String nextBinaryString (int n)和 String nextHexString (int n) 分别用于产生随机长度为1~n的 二进制和十六进制字符串
设计一个测试类,用于测试添加的四个方法,通过调用各方法,参数n=4(固定长度为4或随机长度为1~4),分别生成10随机字符串。 展开
Java程序:
import java.util.Random;
public class HardWork {
public static void main(String[] args) {
RandomEX rand = new RandomEX();
int n = 4;
int group = 10;
for(int i=0; i<group; i++) {
System.out.printf("第 %2d 组:\n", i + 1);
System.out.printf("1~%d长度二进制字符串: \t%s\n", n, rand.nextBinaryString1(n));
System.out.printf("固定%d长度二进制字符串: \t%s\n", n, rand.nextBinaryString2(n));
System.out.printf("1~%d长度十六进制字符串:\t%s\n", n, rand.nextHexString1(n));
System.out.printf("固定%d长度十六进制字符串:\t%s\n", n, rand.nextHexString2(n));
System.out.println();
}
}
}
/**
* 随机数类
* @author 冯向科
* @version 2016.05.07
*/
class RandomEX extends Random {
private static final long serialVersionUID = 1L;
/**
* 产生随机长度为1~n的二进字符串
* @param n 字符串最大长度
* @return 长度为1~n的二进制字符串
*/
public String nextBinaryString1 (int n) {
long num;
StringBuilder str = new StringBuilder();
int len;
do {
num = this.nextLong();
str.append(Long.toBinaryString(num));
len = str.length();
} while(len < n);
int size = this.nextInt(n) + 1;
return str.substring(0, size);
}
/**
* 产生固定长度为n的二进字符串
* @param n 字符串固定长度
* @return 固定长度为n的二进字符串
*/
public String nextBinaryString2 (int n) {
long num;
StringBuilder str = new StringBuilder();
int len;
do {
num = this.nextLong();
str.append(Long.toBinaryString(num));
len = str.length();
} while(len < n);
return str.substring(0, n).toUpperCase();
}
/**
* 产生随机长度为1~n的十六进字符串
* @param n 字符串最大长度
* @return 长度为1~n的十六进制字符串
*/
public String nextHexString1 (int n) {
long num;
StringBuilder str = new StringBuilder();
int len;
do {
num = this.nextLong();
str.append(Long.toHexString(num));
len = str.length();
} while(len < n);
int size = this.nextInt(n) + 1;
return str.substring(0, size).toUpperCase();
}
/**
* 产生固定长度为n的十六进字符串
* @param n 字符串固定长度
* @return 固定长度为n的十六进字符串
*/
public String nextHexString2 (int n) {
long num;
StringBuilder str = new StringBuilder();
int len;
do {
num = this.nextLong();
str.append(Long.toHexString(num));
len = str.length();
} while(len < n);
return str.substring(0, n).toUpperCase();
}
}
运行测试:
第 1 组:
1~4长度二进制字符串: 11
固定4长度二进制字符串: 1010
1~4长度十六进制字符串: 44B
固定4长度十六进制字符串: A7C3
第 2 组:
1~4长度二进制字符串: 110
固定4长度二进制字符串: 1110
1~4长度十六进制字符串: E96D
固定4长度十六进制字符串: 61F1
第 3 组:
1~4长度二进制字符串: 101
固定4长度二进制字符串: 1111
1~4长度十六进制字符串: B1C
固定4长度十六进制字符串: A0F1
第 4 组:
1~4长度二进制字符串: 1101
固定4长度二进制字符串: 1010
1~4长度十六进制字符串: 1DC
固定4长度十六进制字符串: D38E
第 5 组:
1~4长度二进制字符串: 1
固定4长度二进制字符串: 1110
1~4长度十六进制字符串: 70D8
固定4长度十六进制字符串: 495B
第 6 组:
1~4长度二进制字符串: 1100
固定4长度二进制字符串: 1011
1~4长度十六进制字符串: F6
固定4长度十六进制字符串: 5086
第 7 组:
1~4长度二进制字符串: 100
固定4长度二进制字符串: 1100
1~4长度十六进制字符串: 86A
固定4长度十六进制字符串: 23A0
第 8 组:
1~4长度二进制字符串: 1
固定4长度二进制字符串: 1101
1~4长度十六进制字符串: 8
固定4长度十六进制字符串: F967
第 9 组:
1~4长度二进制字符串: 110
固定4长度二进制字符串: 1000
1~4长度十六进制字符串: F194
固定4长度十六进制字符串: 7C3D
第 10 组:
1~4长度二进制字符串: 1101
固定4长度二进制字符串: 1100
1~4长度十六进制字符串: 4
固定4长度十六进制字符串: FB2A
谢谢你