报错,新手自己想了很久,实在想不出,很焦躁

初学者一枚,但确实想不出为什么请高人指点

``package citydistance;

import java.util.ArrayList;

public class Citys2 {
    java.util.Scanner in=new java.util.Scanner(System.in);
    ArrayList<String> citys=new ArrayList<String>();
    int [][]a=new int[citys.size()][citys.size()];
    public void citySize() {
        String s=in.next();
        while(true) {
            if(s.equals("###")) {
                break;
            }
            citys.add(s);
            s=in.next();
        }
    }

    public void setCity() {
        for(int i=0;i<a.length;i++) {
            for(int j=0;j<a[i].length;j++) {
                a[i][j]=in.nextInt();
            }
        }
    }

    public void getDistance() {
        int i=citys.indexOf(in.next());
        int j=citys.indexOf(in.next());
        int distanceAnswer=a[i][j];
        System.out.println(distanceAnswer);
    }
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Citys2 s=new Citys2();
        s.setCity();
        s.getDistance();
    }

}
`


Hagzou  Hugzou  Jigxng    ###

0   1108    708

1108    0   994

708 994 0

Hagzou    Jigxng
报错
Exception in thread "main" java.util.InputMismatchException
    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 citydistance.Try.sum(Try.java:11)
    at citydistance.Try.main(Try.java:25)

试试下面的代码

package citydistance;

import java.util.ArrayList;
import java.util.Scanner;

public class Try {
    ArrayList<Double> s=new ArrayList<Double>();

    public void sum() {
        java.util.Scanner in=new java.util.Scanner(System.in);
        // 下面这句话的意思是只能输入整数
//        int a=in.nextInt();
        // 如果你要输入小数就用Double类型,
        double a=in.nextDouble();
        while(a!=0) {
            s.add(a);
            a=in.nextDouble();
        }
    }
    public void getS() {
        for(Double b:s) {
            System.out.print(b);
        }
    }
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Try c=new Try();
        c.sum();
        c.getS();
    }

}


提示的错误是因为你用的nextInt,即输入的必须是整数,而你输入字符,就会报错。
出现这个问题的原因是:sum() 方法没有结束条件。
当你启动之后,调用了sum()方法,那么在之后所有输入都会去判断是否符合输入类型。
解决方法:在sum()设置结束的标志。例如输入999标识结束。或者设置等待时间,超过一定时间视为结束输入。
你都知道在citySize() 中设置输入结束符“###”。为啥把sum()给忘了呢。

貌似没什么不对。我好像把楼主的问题和一楼的回答看混了。
会什么只有回答修改,没有回复点击没反应呢?

package cn.tzy.Jblog.tests;

import org.springframework.util.StringUtils;
import org.springframework.util.CollectionUtils;

import java.util.ArrayList;
import java.util.Map;
import java.util.Scanner;

public class Try {

ArrayList<Integer> s=new ArrayList<Integer>();
public void sum() {
    //循环输入4个数字
    for(int i=0;i<=3;i++){
        System.out.println("请输入数字");
        Scanner in = new Scanner(System.in);
        int a=in.nextInt();
        //如果a不等于0,那么放入s
        if(a!=0) {
            s.add(a);
        }
    }
}

public void getS() {
    //遍历s,打印
    for(int b:s) {
        System.out.print(b);
    }
}
public static void main(String[] args) {
    // TODO Auto-generated method stub
    Try c=new Try();
    c.sum();
    c.getS();
}

}