Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/339.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何从用户输入的序列中找到唯一的编号(如果有)_Java_Unique - Fatal编程技术网

Java 如何从用户输入的序列中找到唯一的编号(如果有)

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(

用户将输入一系列数字,用逗号分隔的整数,如下面的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(",");
    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)之外,没有什么可做的手术。检查证实了这一假设。