我正在制作一个简单的视频游戏排行榜,它将根据预先设定的分数对用户分数进行排名,这将使他们的排名从最高到最低取决于。
<html>
<!Foundation Page for building our Javascript programs>
<head>
<title>The Foundation Page </title>
<script type="text/javascript">
function leaderboard()
{
var leaderboardarray = new Array (5);
var n, temp;
ok=false;
var score
var rank
score = 150
leaderboardarray[1] = 50;
leaderboardarray[2] = 60;
leaderboardarray[3] = 180;
leaderboardarray[4] = 120;
leaderboardarray[5] = score;
while(!ok)
{
ok = true
for (n=1; n<=5; n=n+1)
{
if (leaderboardarray [n]<leaderboardarray [n-1])
{
leaderboardarray [n] = leaderboardarray [n-1];
ok = false;
}
}
}
for (n=5; n>=1; n=n-1)
document.write (leaderboardarray [n] + "<br>");
}
</script>
</head>head>
<body BGCOLOR="WHITE">
<h2>The Foundation Page </h2>
<hr>
<script LANGUAGE="Javascript"> leaderboard() </script>
</body>
</html>
它正常输出数组,但我仍然坚持数组如何从最高到最低输出值。当我将一个值放在高于其后的任何其他值时,它将只生成相同的值。当我改变其中一个值时,任何人都建议我应该做什么,所以将非常感激。我仍然是编程的新手,如果我做任何愚蠢的事,我很抱歉。谢谢!
答案 0 :(得分:2)
您应该使用Array.sort。
但是,您发布的代码存在的问题是,您实际上并未交换冒泡排序。你只是用较大的值覆盖较小的值。
function bubbleSort(arr) {
var n = arr.length, swapped, tmp;
do {
swapped = false;
for (var i = 1; i < n; i++) {
if (arr[i-1] < arr[i]) {
tmp = arr[i];
arr[i] = arr[i-1];
arr[i-1] = tmp;
swapped = true;
}
}
} while (swapped && n--)
}
a = [50, 60, 70, 80, 150, 120]
bubbleSort(a);
console.log(a);
// [150, 120, 80, 70, 60, 50]
答案 1 :(得分:0)
由于您使用的是没有原型或jQuery的Javascript,您是否尝试使用以下内容替换while语句:
leaderboardarray.sort(function(a, b){return b-a});
有一个great write-up of the Javascript sort function at w3schools.
<HTML>
<!--#Foundation Page for building our Javascript programs#-->
<HEAD>
<TITLE>The Foundation Page </TITLE>
<!--fixed this-->
<SCRIPT type="text/javascript">
function leaderboard()
{
var n, temp;
ok=false;
var score
var rank
var score = 150
var leaderboardarray = new Array(5);
leaderboardarray[0] = 50;
leaderboardarray[1] = 60;
leaderboardarray[2] = 180;
leaderboardarray[3] = 120;
leaderboardarray[4] = score;
leaderboardarray.sort(function(a, b){return b-a});
var myContent = '';
for (var n=0;n<5;n++)
myContent += leaderboardarray[n] + "<br>";
document.getElementById("leaderBoard").innerHTML = myContent;
}
//call the function here
</SCRIPT>
</HEAD>
<!--#Using CSS#-->
<BODY style="background-color:#FFF;">
<H2>The Foundation Page </H2>
<HR>
<!--#This is a placeholder#-->
<div id="leaderBoard"><script type="text/javascript">leaderboard();</script></div>
</BODY>
</HTML>
您的代码很少需要解决。
type
代替language
。document.write
which can cause problems,而是替换占位符div的内容。