Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java抛出NumberFormatException_Java_String_Integer - Fatal编程技术网

Java抛出NumberFormatException

Java抛出NumberFormatException,java,string,integer,Java,String,Integer,我有一个文本文件,其中前两行是整数m和n,然后有m行,每行都有n管道分隔值。我编写了一个程序,读取该文件并使用该文件中的值创建m*n数组,它运行了数百万次,然后突然,使用相同的代码,使用相同的文件,在从第一行读取整数时抛出NumberFormatException。整个代码如下: public class Thegame extends JFrame { public Integer st; public Integer el; public String[][] tab

我有一个文本文件,其中前两行是整数
m
n
,然后有
m
行,每行都有
n
管道分隔值。我编写了一个程序,读取该文件并使用该文件中的值创建
m*n
数组,它运行了数百万次,然后突然,使用相同的代码,使用相同的文件,在从第一行读取整数时抛出
NumberFormatException
。整个代码如下:

public class Thegame extends JFrame {
    public Integer st;
    public Integer el;
    public String[][] tab;

    public Thegame(String pth)
    {
        setSize(640,480);
        setTitle(pth);
        File file = new File(pth);
        try
        {
            BufferedReader rdr = new BufferedReader(new FileReader(file));
            st = Integer.valueOf(rdr.readLine());
            el = Integer.valueOf(rdr.readLine());
            tab = new String[st][el];
            for(Integer i=0; i<st; i++)
            {
                String lin = rdr.readLine();
                StringTokenizer spl = new StringTokenizer(lin,"|");
                for(Integer j=0; j<el; j++)
                {
                    tab[i][j] = spl.nextToken();
                }                
            }
            rdr.close();            
        }
        catch(Exception ex)
        {
            JOptionPane.showMessageDialog(null, ex);
        }
    }
}
public类游戏扩展JFrame{
公共整数街;
公共整数el;
公共字符串[][]选项卡;
公共游戏(字符串pth)
{
设置大小(640480);
setTitle(pth);
文件文件=新文件(pth);
尝试
{
BufferedReader rdr=新的BufferedReader(新文件读取器(文件));
st=整数.valueOf(rdr.readLine());
el=整数.valueOf(rdr.readLine());
tab=新字符串[st][el];

对于(整数i=0;i而言,两条可能的问题线为:

st = Integer.valueOf(rdr.readLine());
el = Integer.valueOf(rdr.readLine());
您需要确保读卡器读取的内容实际上是一个
整数

尝试以下小修改:

st = Integer.valueOf(rdr.readLine().trim());
el = Integer.valueOf(rdr.readLine().trim());
如果这不能解决问题,您需要确保捕获的输入正确

为了帮助调试问题,将输入保存到字符串中,并在尝试解析之前将其打印出来以查看其外观可能会有所帮助:

String stStr = rdr.readLine().trim()
System.out.println(stStr);
st = Integer.valueOf(stStr);
System.out.println(stStr);
String elStr = rdr.readLine().trim();
el = Integer.valueOf(elStr);

如果打印的值不是整数,那么您得到的输入不正确。

您没有碰巧在文件的第一行之前放置了一些特殊字符,是吗?我知道我曾经遇到过这个问题,我花了很长时间才弄清楚到底发生了什么。我想记事本++会让您看看情况是否如此。

一定是什么东西变了,否则就是魔法。可能的嫌疑犯:

  • 输入文件的内容已更改。是否使用某种十六进制编辑器进行了检查。文件是否确实以数字开头
  • Java/system区域设置已更改。以前被视为数字的内容在新区域设置中不再是数字。区域设置的典型捕获是数千个分隔符(,)

如果行为发生了变化,某些东西确实发生了变化

如果代码没有更改,则:

  • 正在读取更改的文件:使用十六进制编辑器查找特殊(不可读)字符。如果您的输入文件没有导致异常,请将其与导致异常的输入文件进行比较(同样,十六进制比较)
  • java环境已更改:检查java虚拟机配置中的更改,特别是
更改:

       st = Integer.valueOf(rdr.readLine());
        el = Integer.valueOf(rdr.readLine());
将来

 String input = rdr.readLine();
 try {
     st = Integer.valueOf( input);
 } catch( NumberFormatException  e){
    System.out.println( "exception reading " + input );
 }
 input = rdr.readLine();
 try {
     el = Integer.valueOf(input);
 } catch( NumberFormatException  e){
    System.out.println( "exception reading " + input );
 }

您将得到问题字符串输出内容的答案。

是什么字符串导致NumberFormatException?是的,您是否愿意发布得到的堆栈跟踪以及异常?还有,您正在读取的文件副本。我确信“没有原因”是一个非常强大的语句…您能对您试图解析的字符串执行一些简单的System.out.println吗?(rdr.readLine()的结果)?您应该像这样定义循环:
for(int i=0;i