在Java中输入第11个用户输入后,将字符串的ArrayList排序为字母顺序

时间:2016-03-31 01:29:21

标签: java

我有一份学校作业,我必须让用户输入名称,然后将其放入标题案例中,然后按字母顺序排列。我的问题是,如果用户输入11个或更多名称,他们将不再按字母顺序排列。如果有人能解释为什么会发生这种情况,并且可能会给我一些解决方法,我会非常感激。谢谢!

student_grades = {}

entries = input('Would you like to enter a students name and grade? (Y/N): ')
entries = entries.lower()

while entries == "y":
    name = input('Enter a students name: ')
    grade = input('Enter the student\'s grade: ')
    #Put in dictionary
    student_grades[name] = grade
    #Print
    print(student_grades)
    entries = input('Would you like to enter a students name and grade? (Y/N)')
    entries = entries.lower()

else:
    names = list(student_grades.keys())
    grades = list(student_grades.values())
    print()
    print('     Grade Book     ')
    print('--------------------')
    print(student_grades)

此方法将字符串返回到标题大小写。

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);
  }

这是我将名称按字母顺序排列的方法。

  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;
  }

分配要求我也有一个方法来打印ArrayList,这就是这个做的

  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;
        }
    }
  }

1 个答案:

答案 0 :(得分:1)

问题在于您的import javafx.application.Application; import javafx.scene.Group; import javafx.scene.Scene; import javafx.scene.control.Tab; import javafx.scene.control.TabPane; import javafx.scene.layout.Pane; import javafx.scene.layout.StackPane; import javafx.scene.layout.VBox; import javafx.scene.paint.Color; import javafx.scene.shape.Circle; import javafx.stage.Stage; public class CircleLayoutExample extends Application { @Override public void start(Stage primaryStage) { TabPane tabs = new TabPane(); tabs.getTabs().add(createTab(new StackPane())); tabs.getTabs().add(createTab(new VBox())); tabs.getTabs().add(createTab(new Pane())); tabs.getTabs().add(createTab(new Group())); Scene scene = new Scene(tabs, 600, 600); primaryStage.setScene(scene); primaryStage.show(); } private Tab createTab(Pane pane) { Circle c1 = new Circle(150, 150, 50, Color.RED); Circle c2 = new Circle(400, 400, 50, Color.YELLOW); pane.getChildren().addAll(c1, c2); Tab tab = new Tab(pane.getClass().getSimpleName()); tab.setContent(pane); return tab ; } // annoyingly, Pane and Group do not have a common superclass with a getChildren() // method, so just reproduce the code... private Tab createTab(Group pane) { Circle c1 = new Circle(150, 150, 50, Color.RED); Circle c2 = new Circle(400, 400, 50, Color.YELLOW); pane.getChildren().addAll(c1, c2); Tab tab = new Tab(pane.getClass().getSimpleName()); tab.setContent(pane); return tab ; } public static void main(String[] args) { launch(args); } } 方法。由于abcSortreturn部分都if,因此else循环无法超越第一个字符串。如果它不能在其他字符串的任何之前,则要将字符串添加到此列表的末尾。如果它不能在第一个字符串之前走,它会到达终点。您需要摆脱for并将行else移到sorted.add(inputName);循环之后。

更正后的版本是:

for

一个好的IDE可以找到这样的问题。当我将你的版本粘贴到IntelliJ IDEA中时,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); } 循环变成了一个可怕的棕色阴影,它告诉我问题:for

我不知道你从哪里得到11号。如果您输入'for' statement does not loop,原始版本将失败。