Java 我的字谜程序不起作用

Java 我的字谜程序不起作用,java,Java,由于某种原因,当我运行这个程序时,它不工作。。。 假设它从包含几个单词的文本文件中读取,然后将这些单词的字谜打印到一个新文件中,每个单词及其字谜打印到一行,然后将下一个单词及其字谜打印到下一行 示例文本输入文件包含 “hpesvy wounxppzu xznoug ehsypv 中广核 xrqryptcb 乌兹格索 gzuonx ysepvh uozgnx " Java Ass2 inputfile.txt输出 我收到一条错误消息“null” 一切都很好。我不知道发生了什么,有人能帮忙吗 代码存

由于某种原因,当我运行这个程序时,它不工作。。。 假设它从包含几个单词的文本文件中读取,然后将这些单词的字谜打印到一个新文件中,每个单词及其字谜打印到一行,然后将下一个单词及其字谜打印到下一行

示例文本输入文件包含

“hpesvy

wounxppzu

xznoug

ehsypv

中广核

xrqryptcb

乌兹格索

gzuonx

ysepvh

uozgnx "

Java Ass2 inputfile.txt输出

我收到一条错误消息“null”

一切都很好。我不知道发生了什么,有人能帮忙吗

代码存在于两个文件中

import java.io.*;
import java.io.FileWriter;
import java.util.*;


public class Ass2 {
    public static void main(String[] args) {

        if (args.length == 2){
            String inFile = args[0];
            String outFile = args[1];

            try{
                FileReader fr = new FileReader(inFile);
                LineNumberReader lnr = new LineNumberReader(fr);

                int linenumber = 0;

                while (lnr.readLine() != null){
                    linenumber++;
                }
                FileInputStream fstream = new FileInputStream(inFile);
                DataInputStream in = new DataInputStream(fstream);
                BufferedReader br = new BufferedReader(new InputStreamReader(in));

                String strLine;
                String [] array = new String[linenumber];
                //Read File line by line
                int i = 0;
                while ((strLine = br.readLine()) != null){
                    array[i] = strLine;
                    i++;
                }
                in.close();
                //String[] sorted = InsertionSort(array);
                //fileWrite(sorted, outFile);
                isAnagram(array);
            }
            catch(Exception e){//Catch exception if any
                System.err.println("Error: " + e.getMessage());
            }
        }
        else{
            System.out.println("I need 2 arguments");   
            }
    }

    private static void fileWrite(String[] array, String outFile) {
        BufferedWriter filewrite = null;
        try{
            filewrite = new BufferedWriter( new FileWriter(outFile));
            filewrite.newLine();
            for(int i=0; i<array.length; i++){
                filewrite.write(array[i]);
                filewrite.newLine();
            }
            filewrite.close( );
            }
        catch ( IOException e){}        
    }

    public static char[] InsertionSort(char[] array){
        //Insertion Sort algorithm from class
        int j;
        for(int i=1; i<array.length; i++){
            char tmp = array[i];
            for(j=i; j>0 && tmp<array[j-1]; j--){
                array[j] = array[j-1];
            }
            array[j] = tmp; 
        }
        return array;
    }

    public static void isAnagram(String [] sorted){
        Node[] linkedListArray = new Node[sorted.length];
        String tmp1 = "";
        String tmp2 = "";
        String [] myarray = new String [sorted.length];

        for (int i = 0; i < sorted.length-1; i++) {
            for(int a=i+1; a<sorted.length; a++){
            tmp1 = sorted[i];
            tmp2 = myarray[a];

            if (tmp1.length() == tmp2.length()){
                 char [] a1 = tmp1.toCharArray();
                 a1 = InsertionSort(a1);
                 char [] a2 = tmp2.toCharArray();
                 a2 = InsertionSort(a2);
                 int j = 0;
                 boolean isAnan = true;
                 while (j<a1.length && isAnan == true){
                     if (a1[j] != a2[j]){
                         System.out.println(tmp1+ " is not An "+tmp2 );
                         Node newLink = new Node(tmp1);
                         linkedListArray[j] = newLink;

                    }
                     j++;
                 } 
            }
        }
    }
    }
    }
import java.io.*;
导入java.io.FileWriter;
导入java.util.*;
公共课助理2{
公共静态void main(字符串[]args){
如果(args.length==2){
字符串infle=args[0];
字符串输出文件=args[1];
试一试{
FileReader fr=新的FileReader(填充);
LineNumberReader lnr=新的LineNumberReader(fr);
int linenumber=0;
while(lnr.readLine()!=null){
linenumber++;
}
FileInputStream fstream=新的FileInputStream(infle);
DataInputStream in=新的DataInputStream(fstream);
BufferedReader br=新的BufferedReader(新的InputStreamReader(in));
弦斯特林;
字符串[]数组=新字符串[行号];
//逐行读取文件
int i=0;
而((strLine=br.readLine())!=null){
数组[i]=strLine;
i++;
}
in.close();
//字符串[]排序=插入排序(数组);
//文件写入(已排序,输出文件);
isAnagram(阵列);
}
catch(异常e){//catch异常(如果有)
System.err.println(“错误:+e.getMessage());
}
}
否则{
System.out.println(“我需要2个参数”);
}
}
私有静态void文件写入(字符串[]数组,字符串输出文件){
BufferedWriter filewrite=null;
试一试{
filewrite=new BufferedWriter(new FileWriter(outFile));
filewrite.newLine();

对于(inti=0;iBro),你犯了大罪

    catch (IOException e) {
    }
这完全隐藏了代码错误的证据。您需要做的第一件事是将其更改为:

    catch (IOException e) {
        e.printStackTrace();
    }
下一个错误是,您正在处理这样一个异常:

    System.err.println("Error: " + e.getMessage());
这就是您的消息(
Error:null
)的来源,因为
NullPointerException
通常没有消息。因此,您需要做的第二件事是将其更改为相同的内容
e.printStackTrace();

然后,您将获得有关出错原因的完整信息

这绝不是一个关于Java中正确异常处理的全面教程,我只是告诉您调试所需的最基本信息

事实上,对于您正在做的事情,您真的不应该捕获任何异常。您应该摆脱
try..catch
块,让任何异常从
main
方法中抛出,如下所示:

public static void main(String[] args) throws Exception

您的错误在
isAnagram
方法中。请参阅以下摘录:

    String[] myarray = new String[sorted.length];

    for (int i = 0; i < sorted.length - 1; i++) {
        for (int a = i + 1; a < sorted.length; a++) {
            tmp1 = sorted[i];
            tmp2 = myarray[a];

            if (tmp1.length() == tmp2.length()) {
String[]myarray=新字符串[sorted.length];
for(int i=0;i

myarray
是一个仅由
null
值组成的数组。因此
tmp2
也将是
null
,因此
tmp2.length()
引发NullPointerException。

是否尝试调试代码?发布错误跟踪。如果我只是在mac上的终端上运行它,如何调试它?请不要编辑问题以显示“已解决”或包含解决方案(因为这对未来的读者来说是无用的。相反,发布一个答案并接受它,这样其他人就可以看到你的问题已经解决了,特别是如果你自己解决了它的话:)请看Ok谢谢!所以错误消息是“线程中的异常”main“Ass2.lang.NullPointerException at Ass2.isAnagram(Ass2.java:114)at Ass2.main(Ass2.java:63)”所以我仍然感到困惑,代码拥有它所需要的一切,它以前工作过,现在已经坏了。@Marvin指出,
myarray
的元素还没有被初始化为
String
值,所以元素是
null
,所以当您试图调用nu上的方法时,会抛出
NullPointerException
ll reference。我真的花了好几个小时在这段代码上,我再也不明白了,我怎么能初始化这些值,使它们成为myarray中的字符串?就像所有的东西都可以让它工作一样,但是当我昨晚把它们放在一起时,它只是没有点击。你可以做的防止NullPointerException的最简单的事情就是(inti=0;i
。但是,您的代码仍然无法按您的意愿运行。您的
myarray
中没有任何内容,我不知道您想要什么。您可以从这里开始独立工作。但是我需要myarray,我无法摆脱它,它在我的教程注释中起作用。为什么它在这里不起作用?我相信您可能需要初始化
myarray
h
sorted
String[]myarray=new String[sorted.length];
System.arraycopy(sorted,0,myarray,0,sorted.length);
谢谢,代码仍然不起作用..我必须看看我的教授。谢谢你的帮助定义“不起作用”你期望的输出是什么?假设它输出一个你想叫它什么的文件,比如说FileOutput,
    String[] myarray = new String[sorted.length];

    for (int i = 0; i < sorted.length - 1; i++) {
        for (int a = i + 1; a < sorted.length; a++) {
            tmp1 = sorted[i];
            tmp2 = myarray[a];

            if (tmp1.length() == tmp2.length()) {