java 计数未知数量输入的出现次数

63lcw9qa  于 2023-05-05  发布在  Java
关注(0)|答案(1)|浏览(245)

我无法停止接受用户的输入。一个无限循环正在创建,我不确定我的条件应该是什么,或者整个程序是否出错。
我试图创建一个程序,用户在第一行输入整数,用空格分隔,并在下一行给出他/她想要计数的整数。

import java.util.Scanner;
import java.util.ArrayList;
public class Pracitce {
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);

        ArrayList<Integer> num = new ArrayList<Integer>();
        
        int count = 0;
        int n = scan.nextInt();
        while(n != '\n'){
            
            num.add(n);
            n = scan.nextInt();
        }
        Integer second = scan.nextInt();

        int arr[] = new int[num.size()];
        for(int i = 0; i<num.size();i++){
            arr[i] = num.get(i);
        }
        for(int i: arr){
            if(second == i){
                count++;
            }
        }
        System.out.println(count);
    }

}

预期输出:1 2 3 3 3 3 3 4

vngu2lb8

vngu2lb81#

nextInt()没有给出是否到达下一行的指示。你可以用Scanner#nextLine读取一行,然后用split在一个空格上读取,最后把每个部分解析成一个int。
例如:

String[] strs = scan.nextLine().split(" ");
int[] nums = new int[strs.length];
for (int i = 0; i < strs.length; i++)
    nums[i] = Integer.parseInt(strs[i]);
int search = scan.nextInt();
int count = 0;
for (int x : nums)
    if (x == search)
        ++count;
System.out.println(count);

有一个内置的方法Collections.frequency,可以计算值的出现次数,因此可以简化。

var nums = Arrays.stream(scan.nextLine().split(" ")).map(Integer::valueOf).toList();
int search = scan.nextInt();
int count = Collections.frequency(nums, search);
System.out.println(count);

相关问题