AAUTO,table元素移除出现问题

nice_so 发布于 2013/11/09 13:40
阅读 317
收藏 0

这个只是娱乐一下,写的一个lottery号码随机生成的,给女朋友拿去买的时候做个参考。。。

import win.ui;
import console;
/*DSG{{*/
mainForm = ..win.form( text="lottery";right=389;bottom=115 )
mainForm.add( 
button={ bottom=72;text="随机生成";left=14;top=39;z=1;right=79;cls="button" };
static={ bottom=109;right=381;left=188;top=82;z=3;transparent=1;cls="static" };
static2={ notify=1;color=0;right=336;left=107;top=42;font=LOGFONT( name='微软雅黑';h=-16 );transparent=1;bottom=71;z=2;cls="static" }
)
/*}}*/

mainForm.button.oncommand = function(id,event){
	mainForm.static2.text = generate();
	mainForm.static.text = "你会中大奖哦!";
}

//红球池
var redBallPool = {};
math.randomize();

//初始化红球池
initial = function(){
	for(i=1;33;1){
		table.push(redBallPool,i);
	}
}

//把红球和篮球的号码按序拼接成字符串
generate = function(){
	var lottery = "";
	var temp = generateRedBall();
	for(i=1;#temp){
		lottery = lottery +"  "+ temp[i];
	}
	lottery = lottery + " , "+generateBlueBall(); 
	return lottery;	
}

//从红球池里面随机取数字
generateRedBall = function(){
	initial();
	var redBall = {};
	for(i=1;6;1){
		var index = math.random(1, table.count(redBallPool));
		table.push(redBall,redBallPool[index]);
		table.remove(redBallPool,index);
	}
	return redBall;
}

//随机取一个数字,作为篮球
generateBlueBall = function(){
	return math.random(1, 16);	
}

mainForm.show() 
win.loopMessage();


其中从红球池取红球的过程中出现了重复数字,这是怎么回事。求高手解答



加载中
0
ndzm
ndzm
var redBallPool = {};
initial = function(){ 
    for(i=1;33;1){ 
        table.push(redBallPool,i); 
    } 
}

应当改为

initial = function(){ 
    var redBallPool = {};
    for(i=1;33;1){ 
        table.push(redBallPool,i); 
    } 
    return redBallPool;
}
这个才是每次初始化33个球,
不然你只是不断的往原来的池里加。

函数逐个测试一下,然后组织一下代码,调整一下变量命名。
例如 initial 改为 initialRedBallPool,函数的位置调整一下,例如 initialRedBallPool 放到最靠近第一次调用的位置。

你看重新整理一下代码,看上去就不会那么抓狂了,即使有错误也容易找出来:

import win.ui; 
/*DSG{{*/
mainForm = ..win.form( text="lottery";right=389;bottom=115 )
mainForm.add( 
button={ bottom=72;text="随机生成";left=14;top=39;z=1;right=79;cls="button" };
static={ bottom=109;right=381;left=188;top=82;z=3;transparent=1;cls="static" };
static2={ notify=1;color=0;right=336;left=107;top=42;font=LOGFONT( name='微软雅黑';h=-16 );transparent=1;bottom=71;z=2;cls="static" }
)
/*}}*/

//初始化初机数种子
math.randomize();
 
//初始化红球池 
var initialRedBallPool = function(){
	var redBallPool = {};
	for(i=1;33;1){
		table.push(redBallPool,i);
	}
	return redBallPool;
} 

//从红球池里面随机取数字
generateRedBall = function(){
	var redBallPool = initialRedBallPool();
	
	var redBall = {};
	for(i=1;6;1){
		var index = math.random(1, #redBallPool);
		table.push(redBall, table.remove(redBallPool,index) ); 
	}
	return redBall;
}

//随机取一个数字作为篮球
generateBlueBall = function(){
	return math.random(1, 16);	
}

//随机取红球蓝球,把红球和篮球的号码按序拼接成字符串
generateBall = function(){ 
	var lottery =  string.join( generateRedBall()," " ) 
	return lottery + " , " + generateBlueBall();  
}

//按钮事件
mainForm.button.oncommand = function(id,event){
	mainForm.static2.text = generateBall();
	mainForm.static.text = "你会中大奖哦!";
}
 
mainForm.show() 
win.loopMessage();


返回顶部
顶部