java - 使用 Scanner 类扫描 int 时出错

标签 java collections hashmap java.util.scanner

我有一项作业要做,内容如下 - 读取 2n 个数字作为输入,其中第一个数字代表键,第二个数字代表值。这两个数字都是整数类型。

编写一个函数 getAverageOfOdd 来找出键由奇数表示的所有值的平均值。假设平均值是整数,而不是小数。返回平均值作为输出。将此函数包含在 UserMainCode 类中。

在 Main 类中,它将用于读取 2n 个数字并构建 HashMap 。调用 UserMainCode 中存在的静态方法。

import java.util.HashMap;
import java.util.Iterator;
import java.util.Scanner;
import java.util.Set;

public class MasteringHashmap

{
public static void main(String args[]) 
{
    String number;
    Scanner sc = new Scanner(System.in);
    int n=sc.nextInt();

    //get next 2n numbers i.e n key value pairs using getValues() function into a hashmap
    HashMap<Integer,Integer> map = getValues(n);
    int out = UserMainCode.getAverageOfOdd(map);
    System.out.println(out);
    //fill your code here

}
static HashMap<Integer,Integer> getValues(int n)
{
    Scanner sc = new Scanner(System.in);
    HashMap<Integer,Integer> hm = new HashMap<Integer,Integer>();
    for(int i=1;i<=n;i++)
    {
        int k = sc.nextInt();
        int v = sc.nextInt();
        hm.put(k, v);
    }
    return hm;
  }
}

class UserMainCode {

public static int getAverageOfOdd(HashMap<Integer,Integer>h1)
{

    //fill your code here
    Set<Integer> keys = h1.keySet();
    Iterator<Integer> it = keys.iterator();
    int key,count=0,sum=0;
    while(it.hasNext())
    {
        if((key=it.next())%2!=0)
        {
            count++;
            sum+=h1.get(key);
        }
    }
    return sum/count;
    //return 0;
   }
}

当我在笔记本电脑上运行此代码时,它运行良好,但不知何故,在线法官响应以下错误

Exception in thread "main" java.util.NoSuchElementException
    at java.util.Scanner.throwFor(Scanner.java:907)
    at java.util.Scanner.next(Scanner.java:1530)
    at java.util.Scanner.nextInt(Scanner.java:2160)
    at java.util.Scanner.nextInt(Scanner.java:2119)
    at MasteringHashmap.main(MasteringHashmap.java:14)

可能是什么原因?

最佳答案

问题是您在 System.in 上打开两个 Scanner 实例,并且它们相互干扰。第一个扫描器可能缓冲了一些输入,没有为第二个扫描器留下任何内容,导致它抛出异常。

您应该在 main 中打开一个 Scanner 并将其传递给 getValues 方法:

public static void main(String args[]) {
    Scanner sc = new Scanner(System.in);
    int n = sc.nextInt();

    //get next 2n numbers i.e n key value pairs using getValues() function into a hashmap
    HashMap<Integer, Integer> map = getValues(n, sc);
    ...
}

static HashMap<Integer, Integer> getValues(int n, Scanner sc) {
    HashMap<Integer, Integer> hm = new HashMap<Integer, Integer>();
    for (int i = 1; i <= n; i++) {
        int k = sc.nextInt();
        int v = sc.nextInt();
        hm.put(k, v);
    }
    return hm;
}

关于java - 使用 Scanner 类扫描 int 时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44268517/

相关文章:

java - 如何使用 webdriver 获取元素的所有后代?

javascript - 使用 Meteor.js 的集合平均函数

java - 如何使用 AES 解密使用 openssl 命令加密的 Java 文件?

java - HashMap 中的内容适当的数据

java - 为什么aspectj 将测试文件夹中的方面编织到我的源类中(而不是测试类)?

java - JSP访问中的HashMap<HashMap<Integer, Integer>, String>

typescript - 如何检查 Typescript 中的 HashMap 是否为空

javascript - 列表 : {[id]:array1} and list: {. ..state.list、[id] :array1} in ReactJs? 之间有什么区别

java - Apache POI - Word (docx) 文档中的多列

java - 使用 SF2 音库对 Gervill 进行简单帮助