2016-03-31 14 views
0

Bir kullanıcının, daha sonra başlığa ve sonra alfabetik sıraya yerleştirilen adlarını girmesi gereken bir okul için bir atamam var. Benim sorunum, bir kullanıcı 11 isim veya daha fazla girerse, artık alfabetik hale gelmez. Birisi bunun neden olduğunu açıklayabilir ve belki bunu düzeltmek için bana bazı ipuçları verebilirse bunu gerçekten takdir ederim. Teşekkürler!Bir dizinin ArrayList'ini, Java'daki 11 kullanıcı girdisinden sonra alfabetik sıraya göre sıralamak

import java.util.Scanner; 
import java.util.ArrayList; 

public class Main 
{ 
    public static void main (String [] args) 
    { 
    ArrayList <String> names = new ArrayList <String>(); 

    Scanner scan = new Scanner(System.in); 

    System.out.println ("Please Enter a Name. (Enter 'stop' to end)"); 
    String g = scan.nextLine(); 
    g = titleCase(g); 
    names.add(g); 

    while (!g.equals("Stop")) 
    { 
     System.out.println ("Please Enter a Name. (Enter 'stop' to end)"); 
     g = scan.nextLine(); 
     g = titleCase(g); 
     if (!g.equals("Stop")) 
      abcSort(g, names); 
    } 

    toString(names); 
    } 

Bu yöntem, dizeyi başlık dosyasına döndüren şeydir.

public static String titleCase(String s) 
    { 
    String firstLetter; 
    s = s.toLowerCase(); 
    firstLetter = s.substring(0, 1); 
    s = firstLetter.toUpperCase() + s.substring(1, s.length()); 

    return s; 
    } 

Bu, adları alfabetik sıraya koyma yöntemim.

public static void abcSort(String inputName, ArrayList <String> sorted) 
    { 
    String g; 
    for (int i = 0; i < sorted.size(); i++) 
    { 
     g = sorted.get(i); 

     if (inputName.compareTo(g) < 0) 
     { 
      sorted.add (i, inputName); 
      return; 
     } 
     else { 
      sorted.add(inputName); 
      return; 
     } 
    } 
    } 

atama da bu bir sorun abcSort yöntemiyle olduğu

public static void toString(ArrayList s) 
    { 
    System.out.println(s); 
    } 
} 
+1

Kenar çubuğu yorumu: İlk kez sorduğunuzda adları kaydetmiyorsunuz. 'While' döngüsünüzde' names.add (g); 'olmalıdır. – robotlos

+0

Sorun, "abcSort (...)" yöntemindedir. Bu yöntem, yalnızca iki şeyden birini yapabilir: a) ya yeni dizeyi listenin başına ekleyin ya da b) yeni dizeyi listenin sonuna ekleyin. Bunun neden olduğunu anlayabilirseniz, nasıl düzelteceğinizi öğrenmelisiniz. – msandiford

cevap

1

yaptığı iştir ArrayList yazdırmak için bir yöntem olması beni gerektirir. Hem if hem de else bölümündeki return öğesinden beri, for döngüsünün ilk dizenin ötesine geçmesi imkansızdır. Dize, diğer dizgilerden herhangi bir'dan önce çıkamazsa, bu listenin sonuna ekleyin. Şu anda ilk dizeden önce gidemezse sonuna kadar gider. else'dan kurtulmanız ve for döngüsünden sonra olması için sorted.add(inputName); hattını taşımanız gerekir. Bir versiyonu düzeltilmiş

geçerli:

public static void abcSort(String inputName, ArrayList <String> sorted) 
{ 
    String g; 
    for (int i = 0; i < sorted.size(); i++) 
    { 
     g = sorted.get(i); 

     if (inputName.compareTo(g) < 0) 
     { 
      sorted.add (i, inputName); 
      return; 
     } 
    } 
    sorted.add(inputName); 
} 

İyi IDE böyle sorunları bulabilirsiniz. Sürümünüzü IntelliJ IDEA'ya yapıştırdığımda, for döngü kahverengi bir renk tonuyla gider ve bana şu sorunu bildirir: 'for' statement does not loop.

11 numarayı nereden aldığınızı bilmiyorum. Anne, Chris, Bob, Stop girerseniz, orijinal sürümü başarısız olur.

+0

Kontrol etmek için ödeve girdiğimiz kod koşucudan 11 tane aldım. Yardım için çok teşekkür ederim! Bir IDE'nin ne olduğunu açıklar mısınız? – nina0402

+0

IDE, programları yazmak ve çalıştırmak için kullandığınız bir programdır. IntelliJ IDEA'yı öneriyorum. Hiç bir IDE kullanmanıza gerek yok, ancak hata bulmakta fayda var. –

İlgili konular