2017-05-30 127 views
1

扫描对于int我有一个分配以使其内容如下 - 读的2n号作为输入,其中第一个数字代表一个键和第二个同样的值。这两个数字都是整数类型。错误,同时使用扫描仪类

写一个函数getAverageOfOdd找出它的键由奇数代表的所有值的平均值。假设平均值是一个整数,从不是十进制数。将平均值作为输出返回。在类UserMainCode中包含此函数。

在一类主要其将用于读出的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) 

可能是什么原因响应?

+1

这是毫无关系的错误,但你的'map'为null,并且你将它传递给一个方法尝试调用它的方法。 –

+0

网上裁判是否提供关于他们如何运行的细节?似乎他们可能以您的代码不期望的方式提供输入。 – BPS

+0

@Aominè我已经编辑了代码,实际上getValues()方法仅用于此目的,但忘记将其添加到main()函数中。 – lawk

回答

1

问题是,您在System.in上打开两个Scanner实例,它们互相干扰。第一台扫描仪可能会缓冲一些输入信息,而第二台扫描仪则没有任何信息,导致它抛出异常。

你应该开拓mainScanner并把它传递给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; 
} 
+0

它的工作,同时使用双扫描器实例是原因。 – lawk