2

请问我能得到一些帮助吗?

我需要从 1 - 80 范围内选择一个不重复的随机数,但不要重复它。而不是我的表单从用户那里获取范围,我希望在 java 脚本中定义它,并在按下提交按钮时,它会在文本区域中生成一个 1 - 80 范围内的非重复数字,就像这样的表单提交、清除和结果文本区域。

这是我的表单代码:

<form name="generate">
<table>
    <tr>
      <td colspan="2"><input TYPE="button" name="send_it" VALUE="ENTER" onClick="chooseRandom(this.form)">&nbsp; &nbsp; <input TYPE="reset" VALUE="CLEAR" onClick="clearForm(this.form)"><br />
      <br />
      </td>
    </tr>
    <tr>
      <td>Random Number:&nbsp;</td>
      <td><input TYPE="text" NAME="result" SIZE="5"></td>
    </tr>
  </table>
</form>

这是我的java脚本:

<script type="text/javascript">

function chooseRandom(form) {

var m = parseInt(form.lower.value);

var n = parseInt(form.upper.value) - m;

var output = Math.floor(Math.random() * n) + m;
        if (m < 0) {
            alert('Enter # greater than 0');
        }
        if (n > 79) {
            alert('Enter # less than 80');
        }

form.result.value = output;

}
// Clears the form

function clearForm(form) {

    form.upper.value="";

    form.lower.value="";

    form.upper.focus();

    form.upper.select();

}
</script>

任何帮助将不胜感激。TYVY 贾里德·摩尔

4

2 回答 2

3

希望这是您想要的:) 我是在这里回答问题的新手。

var rand = [];

for(var i = 1;i<=80;i++){
    rand.push(i);
}
function getRand(){
    var index = Math.floor(Math.random()*rand.length)
    return rand.splice(index,1)
}
于 2013-04-20T09:08:48.650 回答
1

我相信这就是您正在寻找的。您将不得不使用 ajax 来发布表单,以便不进行重置“usedNumbers”的页面刷新。

<form id="generate" name="generate">
    <table>
        <tr>
          <td colspan="2"><input type="button" name="send_it" value="ENTER" onclick="chooseRandom(this.form)">&nbsp; &nbsp; <input type="reset" value="CLEAR" onclick="clearForm(this.form)">
          <br />
          <br />
          </td>
        </tr>
        <tr>
          <td>Random Number:&nbsp;</td>
          <td><input TYPE="text" NAME="result" SIZE="5"></td>
        </tr>
    </table>
</form>

<script>
function chooseRandom(form) {
    form.result.value = getNonRepeatingRandomNumberWithinRange();

    // Do ajax based post thereby preventing page refresh
}

var usedNumbers = [],
    min = 1,
    max = 80;

function getNonRepeatingRandomNumberWithinRange() {
    // Generate random number within range
    var num = Math.floor(Math.random() * max) + min;

    // If number already used, try again (if all slots are used we return the number anyway)
    if (contains(usedNumbers, num) && usedNumbers.length < max)
        return getRand();

    // Store number and return as value
    return usedNumbers[usedNumbers.length - 1] = num;
}

// Helper function for determining if an array contains value
function contains(arr, obj) {
    var i = arr.length;
    while (i--) {
        if (arr[i] === obj)
            return true;
    }
    return false;
}
</script>
于 2013-04-20T11:53:01.773 回答