java异常求助java异常求助java异常求助java异常求助

import java.util.HashMap;
import java.util.Scanner;

public class Milage {
HashMap CityName = new HashMap();
private int[][] milage;

public int SetCityName(){
    Scanner mc = new Scanner(System.in);
    int i = 0;
    String s = new String();
    s = mc.nextLine();
    while( true) {
        if( s.equals("###")) {
            break;
        }else {
            CityName.put(s, i);
            i++;
            s = mc.nextLine();
        }
    }
    mc.close();
    return i;
}

public void SetInt(int n) {
    Scanner sc = new Scanner(System.in);
    int miter;
    milage = new int[n][n];
    for( int i=0; i<n; i++) {
        for( int j=0; j<n; j++) {
            miter = sc.nextInt();
            milage[i][j] = miter;
        }
    }
    sc.close();
}

public int Getmil(String a,String b) {
    int f = CityName.get(a);
    int s = CityName.get(b);
    return milage[f][s];
}
public static void main(String[] args) {
    // TODO 自动生成的方法存根
    Scanner in = new Scanner(System.in);
    Milage m = new Milage();
    int n1 = m.SetCityName();
    m.SetInt(n1);
    String name1 = in.next();
    String name2 = in.next();
    System.out.println(m.Getmil(name1, name2));
    in.close();
}

}

输入:
Exception in thread "main" java.util.NoSuchElementException
at java.util.Scanner.throwFor(Unknown Source)
at java.util.Scanner.next(Unknown Source)
at java.util.Scanner.nextInt(Unknown Source)
at java.util.Scanner.nextInt(Unknown Source)
at Milage.SetInt(Milage.java:30)
at Milage.main(Milage.java:50)
错误语句 30:for( int i=0; i<n; i++) {
错误语句 50:String name1 = in.next();
debug到for的时候就报错了

mc.close()会把System.in也关掉,把mc.close()和sc.close()去掉

mc.close()和sc.close()不写

 package main;

import java.util.HashMap;
import java.util.Scanner;

public class SetCityName {
HashMap<String,Integer> CityName = new HashMap();
private int[][] milage;

public int SetCityName(){
    Scanner mc = new Scanner(System.in);
    System.out.println("请输入城市名,并以###结束");
    int i = 0;
    String s = new String();


    while( true) {
           s = mc.nextLine();
        if( s.equals("###")) {
            System.out.println("各城市及编号为");
            System.out.println(CityName);
            break;
        }else {
            CityName.put(s, i);
            i++;

        }
    }

    return i;
}

public void SetInt(int n) {
      Scanner sc = new Scanner(System.in);
      System.out.println("请输入数量");
        int miter;
        milage = new int[n][n];
        for( int i=0; i<n; i++) {
            for( int j=0; j<n; j++) {
                miter = sc.nextInt();
                milage[i][j] = miter;

            }
        }



}

public int Getmil(String a,String b) {
    int f =  CityName.get(a);
    int s =  CityName.get(b);
    return milage[f][s];
}
public static void main(String[] args) {
    // TODO 自动生成的方法存根


    SetCityName m = new SetCityName();
   int n1 = m.SetCityName();//返回最后的编号

    m.SetInt(n1);
    System.out.println("请输入两个城市名称");
    Scanner in = new Scanner(System.in);
    String name1 = in.next();
    String name2 = in.next();
    in.close();
    System.out.println(m.Getmil(name1, name2));

}

}

改了些地方,虽然不知道这个代码是做什么的/笑哭

input
请输入城市名,并以###结束
北京
上海
###
各城市及编号为
{上海=1, 北京=0}
请输入数量
0
1
2
3
请输入两个城市名称
北京
上海
1