1

我正在使用以下代码读取高分文件,其中先写入分数,将玩家姓名写入下一行,然后如果没有写入文件的 3 个分数,则显示前 3 个或更少的分数。高分显示应该将分数按最高排序,这就是这个程序试图实现的。

Array.sort() 没有做任何该死的事情。事实上,该程序甚至没有像它应该的那样反转数组。我已经使用明确给出的名称和分数数组以这种方式测试了 array.sort() 并且它工作正常。我想它可能仍在以字符串形式读取数据,即使它被声明为其他方式,但是当我将数组类型更改为整数时它会四舍五入小数,所以我很确定不是这样。

我不知道为什么从文件中读取数据会改变它的排序方式。我的老师也不明白发生了什么。有谁知道这里发生了什么?

Imports System.IO

Public Class Form2

    Private Sub Form2_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Dim fileLines() = File.ReadAllLines(Application.StartupPath & "/../../Resources/highscores.txt")
        Dim highscores() As Double = {}
        Dim names() As String = {}
        'For some reason vb doesn't have a function to add items to arrays.
        'Lists have this capability, but if I used a list I couldn't use array.sort
        For i As Integer = 0 To fileLines.Length() - 1
            If (i Mod 2 = 0) Then
                'highscores.add(fileLines(i))
                Array.Resize(highscores, highscores.Length + 1)
                highscores(highscores.Length - 1) = fileLines(i)
            Else
                'names.add(fileLines(i))
                Array.Resize(names, names.Length + 1)
                names(names.Length - 1) = fileLines(i)
            End If
        Next
        Array.Sort(highscores, names)
        highscores.Reverse()
        names.Reverse()
        If highscores.Length() > 0 Then
            Label1.Text = Str(highscores(0)) + " " + names(0)
        End If
        If highscores.Length() > 1 Then
            Label2.Text = Str(highscores(1)) + " " + names(1)
        End If
        If highscores.Length() > 2 Then
            Label3.Text = Str(highscores(2)) + " " + names(2)
        End If
    End Sub

End Class
4

1 回答 1

1

highscores.Reverse() 不起作用,因为它返回反转数组而不是反转现有数组。要反转数组,请使用 Array.Reverse(highscores)。

Array.Sort() 也适用于我的示例,因此很可能您的 highscores.txt 中有一些奇怪的东西。你能举一个这个文件的例子吗?

在每次迭代时调整数组大小也是一个坏主意,因为它很慢并且浪费了大量内存。你最好使用列表。列表可以很容易地用 linq 排序highscores.OrderBy(i => i)(c# 语法)。

于 2012-04-13T07:00:55.300 回答