Java 我的输出跳过了我输入的几个短语
我需要输入名称,然后使用compareTo函数按顺序输出。但当我输入大量字符串时,它会跳过单词。有人知道为什么吗Java 我的输出跳过了我输入的几个短语,java,alphabetical,Java,Alphabetical,我需要输入名称,然后使用compareTo函数按顺序输出。但当我输入大量字符串时,它会跳过单词。有人知道为什么吗 ArrayList<String> names = new ArrayList<String>(); System.out.println("Enter the names and designate the end with a -1:"); Scanner in = new Scanner(System.in); String pe
ArrayList<String> names = new ArrayList<String>();
System.out.println("Enter the names and designate the end with a -1:");
Scanner in = new Scanner(System.in);
String person = in.next();
if (names.isEmpty())
{
names.add(person);
person = in.next();
}
while (!person.equals("-1"))
{
for (int i = 0; i < names.size(); i++)
{
String nameInList = names.get(i);
if (nameInList.compareToIgnoreCase(person) > 0)
{
names.add(i, person);
break;
}
}
person = in.next();
}
System.out.println(names);
}
}
ArrayList name=new ArrayList();
System.out.println(“输入名称并用-1:”)指定结尾;
扫描仪输入=新扫描仪(系统输入);
字符串person=in.next();
if(names.isEmpty())
{
姓名。加(人);
person=in.next();
}
而(!person.equals(“-1”))
{
对于(int i=0;i0)
{
姓名。添加(i,个人);
打破
}
}
person=in.next();
}
System.out.println(名称);
}
}
如果您输入的人名小于列表中已有的人名,则您没有处理这种情况:
boolean found = false;
for (int i = 0; i < names.size(); i++)
{
String nameInList = names.get(i);
if (nameInList.compareToIgnoreCase(person) > 0)
{
names.add(i, person);
found = true;
break;
}
}
if(!found) names.add(person);
boolean-found=false;
对于(int i=0;i0)
{
姓名。添加(i,个人);
发现=真;
打破
}
}
如果(!找到)姓名。添加(个人);
如果您输入的人名小于列表中已有的人名,则您没有处理这种情况:
boolean found = false;
for (int i = 0; i < names.size(); i++)
{
String nameInList = names.get(i);
if (nameInList.compareToIgnoreCase(person) > 0)
{
names.add(i, person);
found = true;
break;
}
}
if(!found) names.add(person);
boolean-found=false;
对于(int i=0;i0)
{
姓名。添加(i,个人);
发现=真;
打破
}
}
如果(!找到)姓名。添加(个人);
类似这样的东西
首先将所有元素添加到列表中,直到输入-1
。最后的排序
public static void main(String[] args) {
ArrayList<String> names = new ArrayList<String>();
String person = "";
System.out.println("Enter the names and designate the end with a -1:");
Scanner in = new Scanner(System.in);
while (in.hasNext()) {
person = in.next();
if(!person.equals("-1")){
names.add(person);
}else{
break;
}
}
Collections.sort(names, new Comparator<String>() {
@Override
public int compare(String s1, String s2) {
return s1.compareToIgnoreCase(s2);
}
});
System.out.println(names);
}
像这样的
首先将所有元素添加到列表中,直到输入-1
。最后的排序
public static void main(String[] args) {
ArrayList<String> names = new ArrayList<String>();
String person = "";
System.out.println("Enter the names and designate the end with a -1:");
Scanner in = new Scanner(System.in);
while (in.hasNext()) {
person = in.next();
if(!person.equals("-1")){
names.add(person);
}else{
break;
}
}
Collections.sort(names, new Comparator<String>() {
@Override
public int compare(String s1, String s2) {
return s1.compareToIgnoreCase(s2);
}
});
System.out.println(names);
}
让我们考虑一下,下面的输入…
Jane
Adam
Harry
Potter
Jane
(Adam
),因此9
被添加到位置0Adam
Harry
(Adam
),但是>-7
(Jane
),2
被添加到位置Harry
1
Admin
(Potter
)、-15
(Harry
)、-8
(Jane
)因此被完全忽略,并且从未添加到列表中-6
[Adam, Harry, Jane]
让我们稍微修改一下代码,更像
ArrayList<String> names = new ArrayList<String>();
System.out.println("Enter the names and designate the end with a -1:");
Scanner in = new Scanner(System.in);
String person = "-1";
do {
person = in.nextLine();
if (!person.equals("-1")) {
int i = 0;
for (; i < names.size(); i++) {
String nameInList = names.get(i);
System.out.println(" > " + nameInList + " = " + nameInList.compareToIgnoreCase(person));
if (nameInList.compareToIgnoreCase(person) > 0) {
break;
}
}
System.out.println("Added @ " + i);
names.add(i, person);
}
} while (!person.equals("-1"));
System.out.println(names);
作为输出
这是因为我们已经为循环设置了,以找到给定名称的最佳位置。如果在任何阶段nameInList
是person
,则循环中断,我们使用i
的当前值作为插入点,否则,i
将成为列表中的下一个位置(这是add
方法的一个很好的副作用)
inti=0;
对于(;i”+nameInList+“=”+nameInList.compareTignoreCase(person));
如果(姓名列表比较信号案例(个人)>0){
打破
}
}
System.out.println(“添加@”+i);
//每一个身体都被添加到最后!
姓名。添加(i,个人);
现在,由于列表已排序,我们可以使用二进制搜索来查找字符串的建议位置,但这可能有点超出要求;)让我们考虑一下,下面的输入…
Jane
Adam
Harry
Potter
Jane
Adam
(9
),因此Adam
被添加到位置0
Harry
Adam
(-7
),但是>Jane
(2
),Harry
被添加到位置1
Admin
Potter
(-15
)、Harry
(-8
)、Jane
(-6
)因此被完全忽略,并且从未添加到列表中
所以我们的最终名单看起来像
[Adam, Harry, Jane]
让我们稍微修改一下代码,更像
ArrayList<String> names = new ArrayList<String>();
System.out.println("Enter the names and designate the end with a -1:");
Scanner in = new Scanner(System.in);
String person = "-1";
do {
person = in.nextLine();
if (!person.equals("-1")) {
int i = 0;
for (; i < names.size(); i++) {
String nameInList = names.get(i);
System.out.println(" > " + nameInList + " = " + nameInList.compareToIgnoreCase(person));
if (nameInList.compareToIgnoreCase(person) > 0) {
break;
}
}
System.out.println("Added @ " + i);
names.add(i, person);
}
} while (!person.equals("-1"));
System.out.println(names);
作为输出
这是因为我们已经为循环
设置了,以找到给定名称的最佳位置。如果在任何阶段nameInList
是person
,则循环中断,我们使用i
的当前值作为插入点,否则,i
将成为列表中的下一个位置(这是add
方法的一个很好的副作用)
inti=0;
对于(;i”+nameInList+“=”+nameInList.compareTignoreCase(person));
如果(姓名列表比较信号案例(个人)>0){
打破
}
}
System.out.println(“添加@”+i);
//每一个身体都被添加到最后!
姓名。添加(i,个人);
现在,由于列表已排序,我们可以使用二进制搜索来查找字符串的建议位置,但这可能有点超出要求;) if(nameInList.compareTignoreCase(person)>0)
。。。如果不是,会发生什么?如果不是,它是否已经更新索引以检查列表中的下一个单词?如果nameInList
<person
会发生什么?person
何时被添加到列表中?if(nameInList.compareTignoreCase(person)>0)
。。。如果不是,会发生什么?如果不是,它是否已经更新索引以检查列表中的下一个单词?如果nameInList
<person
会发生什么?person
何时添加到列表中?