我一直收到这个错误,也有人可以阅读底部的说明,你能告诉我这是否正确吗?特别是第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
答案 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();