import java.io.*;//读取含十六进制码的文本文件
class ReadHex{
private String textName;
private String hex;

public ReadHex(String textNameIn){
textName=textNameIn;
this.readHex();
} private void readHex(){
try{
FileReader fr=new FileReader(textName);
BufferedReader br=new BufferedReader(fr);
boolean off=false;
while(!off){
String hextemp=br.readLine();
if(hextemp==null)
off=true;
else
hex=hex+hextemp;
}
br.close();
}catch(IOException e){
System.out.println("Error - "+e.toString());
}
}//返回得到的字符串
public String getHex(){
return hex;
}
}//将十六进制码转换为十进制
class ConHex{
private String hex;
private int[] out; public ConHex(String hexIn){
hex=hexIn;
this.conHex();
}

private void conHex(){
try{
for(int i=0;i+1<hex.length();i+=2){
String sub=hex.substring(i,i+2);
out[i]=Integer.parseInt(sub,16);
}
}catch(Exception e){
System.out.println("Error - "+e.getMessage());
}
}

//返回十进制数组
public int[] getOut(){
return out;
}
}//输出十进制数
public class HexConverter{
public static void main(String[] args){ ReadHex rh=new ReadHex(args[0]);
ConHex ch=new ConHex(rh.getHex());
int[] outPut=ch.getOut();
for(int i=0;i<outPut.length;i++){
System.out.print(outPut[i]+" ");
}
}
}请看看这程序哪有问题啊,怎么运行时就出异常

解决方案 »

  1.   

    错误信息是这样的:
    E:\trto\java>java HexConverter abc.dat
    Error - For input string: "nu"
    Exception in thread "main" java.lang.NullPointerExce
            at HexConverter.main(HexConverter.java:71)
    麻烦了
      

  2.   

    HexConverter.java 71 行 args[0] 这个给值了吗? 使用命令行调用的。
      

  3.   

    就那个abc.dat
    这个文件里面就一排数
    000A110D1D26021978700F1318141E0C6A197D45B0FFFFFF
      

  4.   

    71行就那循环for(int i=0;i<outPut.length;i++){
      

  5.   

    试了下第一个类读取,结果发现结果前面怎么多个null。
    :java Hex abc.dat
    null000A110D1D26021978700F1318141E0C6A197D45B0FFFFFFimport java.io.*;class ReadHex{
    private String textName;
    private String hex;

    public ReadHex(String textNameIn){
    textName=textNameIn;
    this.readHex();
    } private void readHex(){
    try{
    FileReader fr=new FileReader(textName);
    BufferedReader br=new BufferedReader(fr);
    boolean iof=false;
    while(!iof){
    String hextemp=br.readLine();
    if(hextemp==null)
    iof=true;
    else
    hex=hex+hextemp;
    }
    br.close();
    }catch(IOException e){
    System.out.println("Error - "+e.toString());
    }
    }//返回得到的字符串
    public String getHex(){
    return hex;
    }
    }public class Hex{
    static String hexOut="";
    public static void main(String[] args){
    ReadHex rh=new ReadHex(args[0]);
    hexOut=rh.getHex();
    System.out.println(hexOut);
    }
    }
      

  6.   

    首先在这把 hex 初始化为空。private String hex = "";要不然String会把hex前面加上 null。
    其次,private int[] out; 这个int数据没初始化就往里面放东西。这不该犯的错误。注意初始化。
    还有out[i] = Integer.parseInt(sub, 16); i每次都+2,这个数组存放的结果也肯定是每隔一个有一个你要的数据。
      

  7.   

    代码我大概修改了一下 你看看 都有注释。
    package com.chang.test;import java.io.*;//读取含十六进制码的文本文件
    class ReadHex {
    private String textName;

    //首先在这把 hex 初始化为空。
    private String hex = ""; public ReadHex(String textNameIn) {
    textName = textNameIn;
    this.readHex();
    } private void readHex() {
    try {
    FileReader fr = new FileReader(textName);
    BufferedReader br = new BufferedReader(fr);
    boolean off = false;
    while (!off) {
    String hextemp = br.readLine();
    if (hextemp == null)
    off = true;
    else
    hex = hex + hextemp;
    }
    br.close();
    } catch (IOException e) {
    System.out.println("Error - " + e.toString());
    }
    } // 返回得到的字符串
    public String getHex() {
    return hex;
    }
    }// 将十六进制码转换为十进制
    class ConHex {
    private String hex;
    private int[] out; public ConHex(String hexIn) {
    hex = hexIn;
    this.conHex();
    } private void conHex() {

    //在这把 out 初始化。
    int temp = hex.length()/2 + 1;
    out = new int[temp];
    //用j来表示数组的下标,i 每次都是在加 2,不能用来当作数据out的下标。
    int j = 0;

    try {
    //如果是基数,则要判断 == 的情况。
    for (int i = 0; i + 1 <= hex.length(); i += 2) {
    String sub = "";
    if(i + 1 == hex.length()) {
    //这个地方取到一个16进制数,看你想怎么判断了。可以在前面加0,或这在后面加0;默认前面加0。
    sub = hex.substring(i, i + 1);
    } else {
    sub = hex.substring(i, i + 2);
    }


    out[j] = Integer.parseInt(sub, 16);
    //j++ 数据下标。
    j++;
    }
    } catch (Exception e) {
    e.printStackTrace();
    System.out.println("Error - " + e.getMessage());
    }
    } // 返回十进制数组
    public int[] getOut() {
    return out;
    }
    }// 输出十进制数
    public class HexConverter {
    public static void main(String[] args) {
    ReadHex rh = new ReadHex(args[0]);
    ConHex ch = new ConHex(rh.getHex());
    int[] outPut = ch.getOut();
    for (int i = 0; i < outPut.length; i++) {
    System.out.print(outPut[i] + " ");
    }
    }
    }