Java 如何从用户输入的序列中找到唯一的编号(如果有)
用户将输入一系列数字,用逗号分隔的整数,如下面的2,3,1245,2,75。我怎样才能找到一个不重复的数字并打印回来?到目前为止我已经做到了这一点Java 如何从用户输入的序列中找到唯一的编号(如果有),java,unique,Java,Unique,用户将输入一系列数字,用逗号分隔的整数,如下面的2,3,1245,2,75。我怎样才能找到一个不重复的数字并打印回来?到目前为止我已经做到了这一点 public static void main(String[] args) { Scanner reader = new Scanner(System.in); String line; String[] line2; line = reader.nextLine(); line2= line.split(
public static void main(String[] args) {
Scanner reader = new Scanner(System.in);
String line;
String[] line2;
line = reader.nextLine();
line2= line.split(",");
int n=0;
for(int i=0; i<line2.length; i++){
System.out.println(line2[n]);
n++;
}
}
publicstaticvoidmain(字符串[]args){
扫描仪阅读器=新扫描仪(System.in);
弦线;
字符串[]第2行;
line=reader.nextLine();
line2=行分割(“,”);
int n=0;
对于(int i=0;i您可以将数字放入列表中,然后使用Collections.frequency()
,这比自己迭代集合更有效:
Scanner reader = new Scanner(System.in);
String line;
String[] line2;
line = reader.nextLine();
line2= line.split(",");
List<Integer> list = new ArrayList<>();
for(int i=0; i<line2.length; i++){
list.add(Integer.parseInt(line2[i]));
}
boolean flag = true;
for(int a : list){
if(Collections.frequency(list, a)!=1){
flag = false;
}
}
Scanner reader=新的扫描仪(System.in);
弦线;
字符串[]第2行;
line=reader.nextLine();
line2=行分割(“,”);
列表=新的ArrayList();
对于(int i=0;i,您可以对从拆分字符串中获得的数组进行流式处理,创建其频率映射,并仅保留出现一次的数字:
List<String> unique =
Arrays.stream(input.split(","))
.collect(Collectors.groupingBy(Function.identity(),
Collectors.counting()))
.entrySet()
.stream()
.filter(e -> e.getValue() == 1)
.map(Map.Entry::getKey)
.collect(Collectors.toList());
列表唯一=
Arrays.stream(input.split(“,”))
.collect(收集器.groupingBy(Function.identity()),
Collectors.counting())
.entrySet()
.stream()
.filter(e->e.getValue()==1)
.map(map.Entry::getKey)
.collect(Collectors.toList());
迭代数组,检查每个元素是否有副本
for(String x:line2){
if(unique(x, line2))
System.out.println(x+" is a unique number");
}
下面是检查副本的unique()
函数
private static boolean unique(String x, String[] line2){
for(String i:line2){
if(i.equals(x))
return false;
}
return true;
}
使用Java8的流:我首先过滤字符串数组以删除所有重复项,然后检查字符串是否唯一,最后打印出所有唯一的字符串
import java.util.Scanner;
import java.util.stream.Stream;
public class UniqueNumberScanner {
public static void main(String[] args) {
Scanner reader = new Scanner(System.in);
String line;
String[] line2;
line = reader.nextLine();
line2 = line.split(",");
Stream.of(line2).distinct().filter(item -> Stream.of(line2).filter(item::equals).count() == 1).forEach(System.out::println);
}
}
@Itamagreen frequency是一个O(n)操作,您对集合的每个元素执行该操作,结果是O(n^2)。在这里,数组中有一个O(n)用于创建频率映射,另一个O(m)用于创建频率映射,其中是吗?我不这么认为。如果是的话,我道歉。但这就是它的意义所在;从中学习mistakes@ItamarGreen非常同意。对于你的问题-是的,是的。如果不对集合的实现进行假设,那么除了逐个迭代集合的元素,将其设置为O(n)之外,没有什么可做的手术。检查证实了这一假设。