Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/351.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-主方法中的逻辑错误_Java - Fatal编程技术网

JAVA-主方法中的逻辑错误

JAVA-主方法中的逻辑错误,java,Java,我有一个任务,要求我用JAVA编写一个程序,包含10种不同的方法,包括main。它从文件中获取输入,以便通过各种方法从第二个文件中提取数据。最后,它将结果打印到第三个文件。这是一个介绍类,我们被要求使用hasNext方法。从中检索数据的第二个文件有10行5列,每列表示不同的内容。我使用了sc1.nextInt(),因为我们的教授警告我们程序将读取每一段数据,而我们还没有学会如何从一列中提取数据。我被一个不断收到的错误卡住了。如果有人能帮助我,我已经包括了我的代码片段。多谢各位 这是我一直收到的错

我有一个任务,要求我用JAVA编写一个程序,包含10种不同的方法,包括main。它从文件中获取输入,以便通过各种方法从第二个文件中提取数据。最后,它将结果打印到第三个文件。这是一个介绍类,我们被要求使用hasNext方法。从中检索数据的第二个文件有10行5列,每列表示不同的内容。我使用了sc1.nextInt(),因为我们的教授警告我们程序将读取每一段数据,而我们还没有学会如何从一列中提取数据。我被一个不断收到的错误卡住了。如果有人能帮助我,我已经包括了我的代码片段。多谢各位

这是我一直收到的错误:

线程“main”中出现异常 位于的java.util.InputMismatchException throwFor(Scanner.java:864)位于 next(Scanner.java:1485)位于 java.util.Scanner.nextInt(Scanner.java:2117)位于 java.util.Scanner.nextInt(Scanner.java:2076)位于 家庭作业4.homework4.checkNumber(homework4.java:47)在 homework4.homework4.main(homework4.java:26) /Users/xiomarahenriquez/Library/Caches/NetBeans/8.2/executor snippets/run.xml:53: Java返回:1生成失败(总时间:0秒)

公共静态打印流ps;
公共静态void main(字符串[]args)引发异常{
ps=新的打印流(“elementsResults.txt”);
Scanner sc1=新扫描仪(新文件(“input.txt”);
int-atomicNumber,valid=0,invalid=0,totalProcessed=0;
while(sc1.hasNext()){
atomicNumber=sc1.nextInt();
检查编号(原子编号);
if(检查编号(原子编号)=真){
++有效的;
}否则{
++无效;
}
++全部处理;
}   
}
公共静态布尔校验号(int atomicNumber)引发异常{
Scanner sc2=新扫描仪(新文件(“PeriodicTable.txt”);
int columnA=sc2.nextInt();
字符串列B;
int columnC,columnD,columnE;
而(sc2.hasNext()&&(columnA>-1 | | columnA<118)){
columnA=sc2.nextInt();
columnB=sc2.next();
columnC=sc2.nextInt();
columnD=sc2.nextInt();
columnE=sc2.nextInt();
if(原子数==列A){
返回true;
}
} 
sc2.close();
返回false;
}

这是我的第一个答案。希望能有所帮助。 在您的while循环中,您运行了两次checkNumber方法。这是不必要的。只需按以下方式执行一次即可。此外,++i和i++之间存在细微差异,因此请检查此链接:


我认为问题的原因在于异常堆栈跟踪的第一行:

线程“main”java.util.InputMismatchException中出现异常

这里有一个指向的文档链接。我不能肯定,因为我不知道您的输入文件是什么样子的,但我非常确定当您调用
nextInt()时
,下一次读取的标记不能转换为
int
。我猜扫描器遇到了一些文本或其他阻止它返回
int
。为了找出是哪个标记导致了问题,我尝试包装您对
nextInt()的调用
在try/catch块中。当扫描器抛出一个
InputMismatchException
时,它不会传递导致异常的令牌,因此在抛出异常后,您可以获取令牌的值(如
next()
方法)或完全跳过令牌。下面是一个示例(我现在没有访问IDE的权限,因此这没有经过测试,但希望您能理解):

顺便说一句,如果您不能绝对确定您正在检索的令牌是您认为它将是的类型(在您的示例中是
int
),那么最好将代码的这一部分包装在try/catch块中,这样您就可以处理令牌不是您认为的类型的情况

public static PrintStream ps;

public static void main(String[] args) throws Exception {
    ps = new PrintStream("elementsResults.txt");
    Scanner sc1 = new Scanner(new File("input.txt"));
    int atomicNumber, valid=0, invalid=0, totalProcessed=0;

    while (sc1.hasNext()) {
        atomicNumber = sc1.nextInt();
        checkNumber(atomicNumber);

        if(checkNumber(atomicNumber)== true){
            ++valid;
        } else {
            ++invalid;
        }
        ++totalProcessed;
    }   
}

public static boolean checkNumber (int atomicNumber) throws Exception {
    Scanner sc2 = new Scanner (new File("PeriodicTable.txt"));
    int columnA = sc2.nextInt();
    String columnB;
    int columnC,columnD,columnE;

    while (sc2.hasNext() && (columnA > -1 || columnA < 118)) {    
        columnA=sc2.nextInt();
        columnB=sc2.next();
        columnC=sc2.nextInt();
        columnD=sc2.nextInt();
        columnE=sc2.nextInt();
        if (atomicNumber==columnA) {
            return true;
        }
    } 

    sc2.close();
    return false;
 }
while (sc1.hasNext()) {
    atomicNumber = sc1.nextInt();

    if(checkNumber(atomicNumber)== true){
        valid++;
    } else {
        invalid++;
    }
    totalProcessed++;
}
//Some initialization code here...
Scanner myScanner = new Scanner(new File("myFile.txt"));
while(myScanner.hasNext()) {
    try {
        int myIntVariable = myScanner.nextInt();
    } catch (InputMismatchException ex) {
        System.out.println("Here's the token that caused the problem: " + myScanner.next());
    }
}
//The rest of your code here...