Java 我收到以下代码的粗体错误消息
我很难找到错误消息的根本原因。我相信这与将一种数据类型转换为另一种数据类型有关。在我的例子中,我想我正在尝试将字符串转换为int数据类型 这是代码,下面是运行此代码时收到的错误消息Java 我收到以下代码的粗体错误消息,java,Java,我很难找到错误消息的根本原因。我相信这与将一种数据类型转换为另一种数据类型有关。在我的例子中,我想我正在尝试将字符串转换为int数据类型 这是代码,下面是运行此代码时收到的错误消息 import java.util.*; import java.lang.*; import java.io.*; class hw3_2 { private static void MyPermut(List<Integer> nums, int cur_i, List<List
import java.util.*;
import java.lang.*;
import java.io.*;
class hw3_2
{
private static void MyPermut(List<Integer> nums, int cur_i, List<List<Integer>> permuts){
int n = nums.size();
if(cur_i >= n){
permuts.add(new ArrayList(nums));
return;
}
for(int i=cur_i;i<n;i++){
Collections.swap(nums, cur_i, i);
MyPermut(nums,cur_i+1,permuts);
Collections.swap(nums,cur_i,i);
}
return;
}
private static int check(List<Integer> path, int [][] g){
int cost = 0;
int u = 0, v = path.get(0);
for(int i=0;i<path.size();i++){
v = path.get(i);
if(g[u][v]==-1){
return -1;
}
cost+=g[u][v];
u = path.get(i);
}
v = 0;
if(g[u][v]==-1){
return -1;
}
cost+=g[u][v];
return cost;
}
private static void solve(int [][] g, List<String> cities, HashMap<String,Integer> cityMap, int n){
List<List<Integer>> permuts = new ArrayList<List<Integer>>();
List<Integer> nums = new ArrayList<Integer>();
for(int i=1;i<n;i++){
nums.add(i);
}
MyPermut(nums, 0, permuts);
List<Integer> paths = new ArrayList<Integer>(); // paths with cost
int ansPath = -1, ansCost = Integer.MAX_VALUE;
for(int i=0;i<permuts.size();i++){
paths.add(check(permuts.get(i), g));
if(paths.get(i)!=-1 && ansCost>paths.get(i)){
ansCost = paths.get(i);
ansPath = i;
}
}
System.out.print("Path:");
if(ansPath==-1){
System.out.println();
System.out.println("Cost:" + -1);
}
else{
System.out.print(cities.get(0)+"->");
for(int i=0;i<permuts.get(ansPath).size();i++){
System.out.print(cities.get(permuts.get(ansPath).get(i))+"->");
}
System.out.println(cities.get(0));
System.out.println("Cost:" + ansCost);
}
}
public static void main (String[] args) throws java.lang.Exception
{
BufferedReader br = new BufferedReader(
new InputStreamReader(System.in));
int t;
// System.out.println("Enter no. of test cases :");
t = Integer.parseInt(br.readLine());
while(t--!=0){
// System.out.println("Enter the test case :");
int n, e;
n = Integer.parseInt(br.readLine()); // no of cities
int [][] g = new int[n][n]; //for graph with n cities adjacency matrix
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
g[i][j] = -1;
}
}
List<String> cities = new ArrayList<String>();
HashMap<String,Integer> cityMap = new HashMap<String,Integer>();
for(int i=0;i<n;i++){
String s = br.readLine();
cities.add(s);
cityMap.put(cities.get(i), i);
}
// for(int i=0;i<n;i++){
// System.out.println(i + " " + cities.get(i));
// }
e = Integer.parseInt(br.readLine()); // no. of edges
for(int i=0;i<e;i++){
StringTokenizer st = new StringTokenizer(br.readLine());
String u = st.nextToken();
String v = st.nextToken();
int w = Integer.parseInt(st.nextToken());
g[cityMap.get(u)][cityMap.get(v)] = w;
}
// we have network of cities in graph 'g'
solve(g, cities, cityMap, n);
}
}
}
正在转换的字符串中包含除整数中合法字符以外的其他字符 因此,在类似这样的情况下:
t = Integer.parseInt(br.readLine());
然后br.readline()返回的不仅仅是数字(和可选符号)。或者它返回null,因为您已到达输入的末尾
异常消息告诉您实际读取的是“AA”。这显然不是一个整数值
因此,问题是:
- 当需要整数时,为什么输入包含AA
- 为什么要将AA解析为整数
NumberFormatException
是什么意思?例如,在输入字符串“AA”中显示,您是否希望代码尝试将“AA”
转换为数字?如果是,你认为结果应该是什么,为什么?如果没有,请后退一步,询问代码为什么要进行这种转换。“在我的情况下,我想,我正在尝试将字符串转换为int数据类型。”您编写了这么多代码,您正在猜测您尝试使用它的最基本方面?在编写代码时,你应该对每个部分都有一个深思熟虑的目的。你应该试着了解输入。似乎您的变量n
不是获取整数,而是接收字母。请仔细阅读并思考您希望代码遵循的逻辑过程。调用Integer.parseInt(st.nextToken())时
,您应该有理由期望st.nextToken()
结果看起来像一个整数(比如,输入的文档格式),并且有一个计划,在不满足该期望时应该做什么(因为在现实世界中,输入被破坏)。此外,请停止给所有内容指定单字母变量名。如果必须使用注释来解释变量名称的含义,则该名称是错误的。你让事情变得更加困难,因为每次你必须使用这个变量,你必须花额外的精力记住你用来命名它的密码。这比你在打字时可能节省的工作量要多得多。
t = Integer.parseInt(br.readLine());