这个随机数汇总怎么写啊

andrew_zx 2009-12-22 10:50:20
需要打出的是10000个随机数0和1,在进行0多少个1多少个的汇总

111000001000001111100010011111.。。。。。。。。。。。。。。。。。。。。。。。。。。(一行70个随机数)
..................................................................................


汇总:
1:3 * 0:5 * 1:1 * 0:5.....................(一行10个汇总,所表达的意思是第一个1有三个相同的,第二个零有5个相同的)


应该怎么写啊
...全文
299 22 打赏 收藏 转发到动态 举报
写回复
用AI写文章
22 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhuzeitou 2009-12-25
  • 打赏
  • 举报
回复
String s = generate(10000, new char[]{'0', '1'});
这样就是生成一个长度为10000的0和1组成的字符串
zhuzeitou 2009-12-25
  • 打赏
  • 举报
回复
	public static String generate(int n, char[] alphabet) {
StringBuffer sb = new StringBuffer();
int length = alphabet.length;
for (int i = 0; i < n; i++) {
int random = (int)(Math.random() * length);
sb.append(alphabet[random]);
}
return sb.toString();
}


这个是生成函数,参数n是个数,alphabet是字母表,要生成只有0和1的话char[] alphabet = {'0', '1'};就可以

自己多动手练练吧,这又不是什么很难的东西
andrew_zx 2009-12-25
  • 打赏
  • 举报
回复
有哪位大大能写齐吗 谢谢
牛叔 2009-12-25
  • 打赏
  • 举报
回复
关键在换行

我观望,不想动
angel6709 2009-12-25
  • 打赏
  • 举报
回复
trimStart('0')
trimStart('1')
来回交替
计算长度,直到长度为0
tuerqizhou 2009-12-25
  • 打赏
  • 举报
回复
呵呵
学习了
zhuzeitou 2009-12-23
  • 打赏
  • 举报
回复
把生成和汇总分成2个模块来做啊,我们做的都是汇总部分

而且你不是说生成你做好了么?

把生成的字符串丢进汇总的方法不就可以了嘛
  • 打赏
  • 举报
回复
public static void main(String[] args){
String numLine="00100000111110111010101010101001";
count(numLine);
}

public static void count(String numLine){
if(numLine==null||numLine.equals("")) return;

List<String> result=new ArrayList<String>();
char[] chrs=numLine.toCharArray();
char chr,curChar=chrs[0];
int count=1;

for(int i=1,len=chrs.length;i<len;i++){
chr=chrs[i];
if(curChar!=chr||i==len-1){
result.add(curChar+"*"+count);
curChar=chrs[i];
count=0;
}

count++;
}

int i=1;
for(String str:result){
System.out.print(str+"\t"+(i%10==0?"\n":""));
i++;
}
}
zhuzeitou 2009-12-22
  • 打赏
  • 举报
回复
额,看成7个了,自己改下吧

简单的说,就是一个变量记录当前字符,一个变量计数,再留一个变量记录这行已经记录的个数
daisycool 2009-12-22
  • 打赏
  • 举报
回复
不好意思,上面的方法忽略了数字的顺序。
zhuzeitou 2009-12-22
  • 打赏
  • 举报
回复
	public static void count(String s) {
char current = 0;
int count = 0;
int control = 0;
char[] ch = s.toCharArray();
for (int i = 0; i < ch.length; i++) {
if (ch[i] == current)
count++;
else {
if (count != 0) {
System.out.printf("%c:%d", current, count);
control = (control + 1) % 7;
System.out.print(control == 0 || i == ch.length - 1 ? "\n" : " * ");
}
current = ch[i];
count = 1;
}
}


count("00100000111110111010101010101001");
结果:
0:2 * 1:1 * 0:5 * 1:5 * 0:1 * 1:3 * 0:1
1:1 * 0:1 * 1:1 * 0:1 * 1:1 * 0:1 * 1:1
0:1 * 1:1 * 0:1 * 1:1 * 0:2
daisycool 2009-12-22
  • 打赏
  • 举报
回复
如果你要一个数一个数的生成,那在生成随机数的同时就可以进行计数了。可以放到List<Map<Integer,Integer>>里,每个List是一行随机数的汇总。

如果随即数是事先给出的,也不必遍历10000个数。比如说第一行是0000010111011011010101010111111,对这一行进行三个操作:
1 转变成String: number=“0000010111011011010101010111111”
2 以0分割:arrayZero[]=number.split("0");
3 以1分割:arrayOne[]=number.split("1");

然后获得生成的这两个array里面元素的长度就可以了,例如:arrayZero[0].length();


dong502 2009-12-22
  • 打赏
  • 举报
回复
给你个思路自己写吧。对自己有好处的。
先把10000个存到一个集合里,然后遍历集合,再声明全局变量,一个记录1的变量=0,一个记录0的变量=0,
在if(集合遍历数==1)时 {
if(变量0!=0){
输出“0:”+变量0;变量0=0;}
变量1做累加;
}
当集合遍历数==0时,
if(变量1!=0){
输出“1:”+变量1;变量1=0;
}
变量0做累加。
大概思路这样了,呵呵可能有些问题,具体代码我也没写,你自己动动手吧。
andrew_zx 2009-12-22
  • 打赏
  • 举报
回复
这个我知道,我是说汇总,那位朋友能否帮忙写写一下
andrew_zx 2009-12-22
  • 打赏
  • 举报
回复
ls的各位大哥都是自己做出字符串,要随机生成后再将字符串进行汇总,而且需要A4打印出来所以一行10个汇总
monkeyking1987 2009-12-22
  • 打赏
  • 举报
回复
随机数可以这样:
int i=((int)(Math.random()*10))%2;
通过与2的余数来确定是1还是0,
要10000个就加个循环
zhuzeitou 2009-12-22
  • 打赏
  • 举报
回复
lz的要求中有“一行10个汇总”这个东西
宅男小何 2009-12-22
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 lazy_p 的回复:]
上面少写了一句话,额哈哈!
Java codepublicclass Test {publicstaticvoid count(String str) {int pre=0;int count=0;int len= str.length();// System.out.print("len= " + len);for (int i=0; i< len;++i) {int ii= Integer.parseInt(String.valueOf(str.charAt(i)));int tmp= ii&1;if (tmp== pre) {++count;
}else {if (count!=0)
System.out.print(pre+":"+ count+" *");

count=1;
}
pre= tmp;// System.out.println("i = " + i); }
System.out.print(pre+":"+ count);
}publicstaticvoid main(String[] args) {
Test.count("111000001000001111100010011111");

}

}
结果是:
1:3 * 0:5 * 1:1 * 0:5 * 1:5 * 0:3 * 1:1 * 0:2 * 1:5
[/Quote]
换行?不存在把?只要把要统计的字符串传过去就可以了啊!
zhuzeitou 2009-12-22
  • 打赏
  • 举报
回复
顺便发现bug一个,没有处理最后的那串

	public static void count(String s) {
char current = 0;
int count = 0;
int control = 0;
char[] ch = s.toCharArray();
for (int i = 0; i < ch.length; i++) {
if (ch[i] == current)
count++;
else {
if (count != 0) {
System.out.printf("%c:%d", current, count);
control = (control + 1) % 10;
System.out.print(control == 0 ? "\n" : " * ");
}
current = ch[i];
count = 1;
}
if (i == ch.length - 1)
System.out.printf("%c:%d", current, count);
}
}
zhuzeitou 2009-12-22
  • 打赏
  • 举报
回复
额,ls似乎没有考虑换行问题啊,算法和我上面差不多,不过是直接字符串操作,而我是取出char数组来操作
加载更多回复(2)

62,621

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧