我的选择排序程序使用字符串有什么问题?

时间:2016-03-23 02:35:30

标签: vb.net

我试图使用一个包含5个单词的数组,并按照alpha顺序排列它们。我有点困惑,所以如果有人可以向我解释发生了什么,以及如何修复将非常感激的代码。

以下是代码:

Public Class Form1

Dim List() As String = {"bravo", "charlie", "zulu", "alpha", "whiskey"}
Dim swap, value As Integer
Dim i As Integer
Dim sw As String
Dim j, sp, x As Integer
Dim temp(0) As String

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

    Label1.Text = Nothing

    For i = 0 To List.Length - 1
        sw = List(i)
        sp = i
        For x = sp To List.Length - 2

        Next
        If sw > List(x) Then
            temp(0) = List(x)
            List(x) = sw
            sw = temp(0)
        End If
    Next
    For j = 0 To List.Length - 1
        Label1.Text &= List(j) & ", "
    Next
End Sub

结束班

2 个答案:

答案 0 :(得分:0)

  1. 您的内循环(For x = sp To List.Length - 2)为空。
  2. 内循环结束条件不正确。为什么循环到List.Length - 2
  3. 无需使用数组来存储临时字符串。 Dim temp As String就够了。

答案 1 :(得分:0)

您的代码的主要问题是使用sw变量。问题在于,当您执行作业sw = temp(0)时,您正在更改sw指向的引用,而不是首先更改您分配的List(i)的原始sw 。您实际上是在更新临时变量而不是原始列表。

以下是您的代码应该是什么样的:

For i = 0 To List.Length - 1
    For x = i To List.Length - 1
        If List(i) > List(x) Then
            Dim temp = List(x)
            List(x) = List(i)
            List(i) = temp
        End If
    Next
Next

除了List之外,我还删除了所有类级变量。它们都是不必要的。您需要保留的唯一一个是temp(作为String而不是String())并且我使用Button1_Click方法。

当我在原始列表中运行此代码时,我得到了这个:

alpha, bravo, charlie, whiskey, zulu