2016-03-23 16 views
0

5 kelime içeren bir dizi kullanmaya çalışıyorum ve bunları alfa düzeninde düzenliyorum. Kafam karıştı, eğer birisi bana neyin devam ettiğini ve büyük ölçüde takdir edilecek olan kodu nasıl düzeltebileceğini açıklayabilirse.Dizilerim kullanılarak seçim sıralama programımda sorun nedir?

Ortak sınıf 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 

End Class

+0

sadece 'list 'kendisi sıralamak isteyen musunuz? Eğer öyleyse sadece listeden '.Sort'ı arayın ... – Codexer

+0

@Codexer - Ödev gibi geliyor. – Enigmativity

+0

@Enigmativity Mutlaka ev ödevi değildir. Ama, çeyrek yarın biter ve bunu sınıfta anlayamıyorum. –

cevap

0

Kodunuzdaki başlıca sorununuz, sw değişkeninin kullanılmasıdır. Sorun atama sw = temp(0) yaptığınızda başvuru değişiyor olmasıdır olduğunu sw işaret ettiği, ancak ilk etapta gelen sw atanan orijinal List(i). Orijinal listeyi değil geçici bir değişkeni etkin bir şekilde güncelliyorsunuz. Ben de List haricinde sınıf düzeyindeki değişkenlerin tümünü ortadan kaldırmıştır

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 

:

İşte kod gibi görünmelidir budur. Hepsi gereksizdi. Eğer tutmak için gerekli tek (a String değil String() gibi) temp oldu ve Button1_Click yönteminde koydu. Ben orijinal listede bu kodu çalıştırdığınızda

Bunu çıkmak:

 
alpha, bravo, charlie, whiskey, zulu 
0
  1. Sizin iç döngü (For x = sp To List.Length - 2) boş: Burada

    kodudur.
  2. İç döngü sonu durumu yanlış. Neden List.Length - 2'a dönüyor?
  3. Geçici dizgiyi saklamak için bir dizi kullanmanıza gerek yoktur. Dim temp As String yeterlidir.
+0

İç döngüye ne yapabilirim? Bu konuda kafam karıştı. –

+0

İfadeleri burada koymak isteyebilirsiniz, bu yüzden aslında biraz iş yapar. Ayrıca, [seçim seçimi nasıl çalışır] hakkında bilgi edinin (https://en.wikipedia.org/wiki/Selection_sort). – jack3694078

+0

If ifadem doğru alanda mı ve seçim için çalışacak mı? –