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);
}
}
Kenar çubuğu yorumu: İlk kez sorduğunuzda adları kaydetmiyorsunuz. 'While' döngüsünüzde' names.add (g); 'olmalıdır. – robotlos
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