来自用户

时间:2017-10-14 16:10:58

标签: java io maps

我一直收到这个错误,也有人可以阅读底部的说明,你能告诉我这是否正确吗?特别是第3部分。非常感谢您的帮助。

有人可以帮助我吗?

  

线程“main”中的异常java.lang.NumberFormatException:对于输入字符串:“Jacob”at

     

java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)

     

在java.lang.Integer.parseInt(Integer.java:580)

     

在java.lang.Integer。(Integer.java:867)

     

在assign14.Assign14.main(Assign14.java:49)

package assign14 {

import java.io.IOException;
import java.util.Scanner;
import java.util.HashMap;
import java.util.ArrayList;
import java.util.Map;

public class P62_akp7103 {

public static Map[] boys = new Map[10];
public static Map[] girls = new Map[10];

public static void main(String[] args) {
    Scanner reader = new Scanner(System.in);

    System.out.print("Enter a yeat in the range [2001, 2010]: ");
    String year = reader.next();
    System.out.print("Enter a gender [M/F]: ");
    String gender = reader.next();
    System.out.print("Enter a name: ");
    String name = reader.next();
    System.out.println();

    Map<String, String> mapBoys = new HashMap<>();
    Map<String, String> mapGirls = new HashMap<>();
    int rank = 0;

    try {
        java.net.URL url = new java.net.URL(
                "http://www.cs.armstrong.edu/liang/data/babynamesranking"
                + year + ".txt");

        // Create input file from url
        Scanner input = new Scanner(url.openStream());
        while (input.hasNext()) {
            String s = input.next();
            String[] temp = s.split(" ");
           //This is where the error is 
            if (gender.equalsIgnoreCase("M")) {
                rank = new Integer(temp[0]);
            } else if (temp[3].contains(name)) {
                rank = new Integer(temp[0]);
            }
        }
    } catch (IOException e) {
        e.printStackTrace();
        System.out.println("Invalid Year");
    }
    if (rank != 0) {
        System.out.println(name + " is ranked #" + rank + " in year " + year);

    }
}
}

1]编写一个程序,提示用户输入[2001,2010]范围内的年份,性别和姓名,然后显示所选年份和性别的名称排名。

2]数据文件由数据行组成,每行包含一个排名(一个整数),一个男孩的名字(一个字符串),给出该名称的男孩数(一个整数),一个女孩的名字(a字符串)和给出该名称(整数)的女孩数量。值由空格和/或制表符分隔,默认情况下java.util.Scanner将用作分隔符。

3]数据将存储在两个地图数组中,一个用于男孩的名字,一个用于女孩的名字。每个数组必须为10年的数据中的每一个都有一个元素。数组中的每个元素都是一个映射(实现接口映射的Java API中的一个类),它存储键/值对,每对由名称及其排名组成,名称作为键。

这是其中一个txt文件的样子

1-10号是他们的等级

1雅各布30541艾米丽24450

2迈克尔28220麦迪逊21771

3 Joshua 25965 Hannah 18802

4 Matthew 25142 Emma 16520

5 Ethan 22099 Alexis 15629

6 Andrew 21996 Ashley 15335

7 Joseph 21872 Abigail 15292

8 Christopher 21665 Sarah 14741

9 Nicholas 21380 Samantha 14652

10 Daniel 21291 Olivia 14627

这是示例输出的样子

Enter a year: 2002
Enter a gender M/F: M
Enter a name: Jacob

Jacob name was ranked #1 in 2002

1 个答案:

答案 0 :(得分:0)

  

来自用户输入的java.lang.NumberFormatException错误

每次索引0 String s = input.next();的每个单词都会得到NumberFormatException split it by String[] temp = s.split(" ");temp[0],当它试图将名称解析为String时,它会为您提供异常{{1}在java.lang.NumberFormatExceptio点,因为你最后没有通过rank = new Integer(temp[0]);中断到下一行并尝试解析文本文件中定义的每一行中的每个单词。

下面我发布了解决方案结帐 &amp; 尝试了解您丢失的代码部分。

input.nextLine();