Java 我收到以下代码的粗体错误消息

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

我很难找到错误消息的根本原因。我相信这与将一种数据类型转换为另一种数据类型有关。在我的例子中,我想我正在尝试将字符串转换为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<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());