我有一份学校作业,我必须让用户输入名称,然后将其放入标题案例中,然后按字母顺序排列。我的问题是,如果用户输入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;
}
}
}
答案 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);
}
}
方法。由于abcSort
和return
部分都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
,原始版本将失败。