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