关于java.util.InputMismatchException的事情?

时间:2014-07-02 19:23:16

标签: java

大家好! 伙计我有一个简单的代码问题。我无法找到错误的地方。每当我想要运行程序时,我都会得到这样的信息:

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.nextDouble(Unknown Source)
    at TeamMMA.<init>(TeamMMA.java:17)
    at ShowTeamFrame.main(ShowTeamFrame.java:8)

这是一个简单的程序,我想要一个开始:

import java.text.DecimalFormat; 
public class MMACompetitors {
private String name;
private double average;
public MMACompetitors(String name, double average){
    this.name=name;
    this.average=average;

}
public String getName(){
    return name;
}
public double getAverage(){
    return average;
}
public String getAverageString(){
    DecimalFormat decFormat=new DecimalFormat();
    decFormat.setMaximumIntegerDigits(0);
    decFormat.setMaximumFractionDigits(3);
    decFormat.setMinimumFractionDigits(3);
    return decFormat.format(average);
   }
}

第二节课:

import java.io.File;
import java.io.IOException;
import java.util.Scanner;
import javax.swing.JFrame;
import javax.swing.JLabel;
import java.awt.GridLayout;

@SuppressWarnings("serial")

public class TeamMMA extends JFrame{
public  TeamMMA() throws IOException{
    MMACompetitors mma;
    @SuppressWarnings("resource")
    Scanner keyboard = new Scanner(new File("MMAStatisticBullyTeam.txt"));
    for(int num=1;num <=5;num++){
        mma=new MMACompetitors(keyboard.nextLine(),keyboard.nextDouble());
        keyboard.nextLine();
        addCompetitorInfo(mma);
        }
    setTitle("Bully's");
    setLayout(new GridLayout(9,2,20,30));
    setDefaultCloseOperation(EXIT_ON_CLOSE);
    pack();
    setVisible(true);
    }
void addCompetitorInfo(MMACompetitors mma){
    add (new JLabel (" "+ mma.getName()));
    add (new JLabel(mma.getAverageString()));
}
}

主要课程:

import java.io.IOException;


 class ShowTeamFrame {

    public static void main(String[] args) throws IOException {
        // TODO Auto-generated method stub
new TeamMMA();
    }
}

感谢您的支持!我感谢所有评论,我会接受所有建议!

2 个答案:

答案 0 :(得分:0)

for循环中,从扫描程序读取的两行预计文件中的数据将以匹配类型存在,以便尝试按该顺序读取。

mma=new MMACompetitors(keyboard.nextLine(),keyboard.nextDouble());
keyboard.nextLine();

文件中的文本应该是任何文本后面跟一个空格然后再跟随任何带有行尾的文本的行。例如

This line is a for nextLine method
12.01 The value is twelve do zero one

该空间是Scanner的默认分隔符。空格是第二行,对于nextDouble来说,要识别要读取的文本是双重的。当使用nextLine读取时,此默认分隔符不适用,因为它读取到行尾。

第二行没有以有效数字开头,或者数字后面没有空格。

由于它处于for循环中,因此应重复具有此模式的行集。

答案 1 :(得分:0)

如果第17行是keyboard.nextLine(),则此说明可以帮助您:

  

扫描程序抛出此异常以指示令牌   检索到的与预期类型的​​模式不匹配   令牌超出预期类型的​​范围。