代码基于具有用户输入的List。然后它显示列表并询问输入y / n。如果是,则显示Enter,并允许您输入以逗号分隔的数字。哪个工作正常。
然而,在while循环之后它启动了collections.frequency,我还不明白。只有当数字像12一样逐个输入然后点击输入更多数字直到按下n时它才有效。这打破了循环。并显示包含重复项的列表。
但是,如果数字一次全部输入一行,则不起作用:12,23,55,依此类推。它不会找到也不会显示重复项。只有列表中的内容。我发现一次输入一个号码非常麻烦。有人可以帮我改变代码,这样我就可以一次输入所有数字,然后按回车键,仍然可以搜索重复的代码,并在最后显示副本。
package Input_Array_From_User;
import java.util.*;
public class Input_Array {
public static void main(String[] args) {
// TODO Auto-generated method stub
List<String> list = new ArrayList<String>();
Scanner stdin = new Scanner(System.in);
do {
System.out.println("Current list is " + list);
System.out.println("Add more? (y/n)");
if (stdin.next().startsWith("y")) {
System.out.println("Enter : ");
list.add(stdin.next());
} else {
break;
}
} while (true);
System.out.println("\nExample 2 - Count all with frequency");
Set<String> uniqueSet = new HashSet<String>(list);
for (String temp : uniqueSet) {
System.out.println(temp + " shows that many times : " + Collections.frequency(list, temp));
}
}
答案 0 :(得分:0)
您可以一次性添加由空格分隔的数字,并在完成后按Enter键:
1 2 3 4 5
为此,您必须停止询问用户是否希望在每次迭代时添加更多内容。要知道何时停止,您可以要求用户在开始循环之前通知他们想要输入的元素数量,并在达到该数字时停止循环。
代码如下所示:
public static void main(String[] args) {
List<String> list = new ArrayList<String>();
Scanner stdin = new Scanner(System.in);
int n = stdin.nextInt();
for (int i = 0; i < n; i++) {
list.add(stdin.next());
}
System.out.println("\nExample 2 - Count all with frequency");
Set<String> uniqueSet = new HashSet<String>(list);
for (String temp : uniqueSet) {
System.out.println(temp + " shows that many times : " + Collections.frequency(list, temp));
}
}
示例输入是:
5
1 2 2 4 5
相应的输出将是:
Example 2 - Count all with frequency
1 shows that many times : 1
2 shows that many times : 2
4 shows that many times : 1
5 shows that many times : 1
如果您想使用自定义分隔符,例如,
,请检查useDelimiter()
中的方法Scanner
。