Java 我的输出跳过了我输入的几个短语

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

我需要输入名称,然后使用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 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
    ),因此
    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,个人);

现在,由于列表已排序,我们可以使用二进制搜索来查找字符串的建议位置,但这可能有点超出要求;)
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
何时添加到列表中?