java 异常的逻辑_关于JAVA:JAVA-主要方法中的逻辑错误

我的作业要求我用JAVA用10种不同的方法(包括主要方法)编写程序。 它从文件中获取输入,以便通过各种方法从第二个文件中提取数据。 最后,它将结果打印到第三个文件。 这是一个入门课程,我们被告知要使用hasNext方法。 从中检索数据的第二个文件有10行和5列,每列表示不同的内容。 我使用sc1.nextInt()是因为我们的教授警告我们程序会读取每条数据,而我们还没有学会如何仅从一列中提取数据。 我因不断收到的错误而陷入困境。 如果有人可以帮助我,我会提供一段代码。 谢谢。

这是我一直收到的错误:

Exception in thread"main"

java.util.InputMismatchException at

java.util.Scanner.throwFor(Scanner.java:864) at

java.util.Scanner.next(Scanner.java:1485) at

java.util.Scanner.nextInt(Scanner.java:2117) at

java.util.Scanner.nextInt(Scanner.java:2076) at

homework4.HomeWork4.checkNumber(HomeWork4.java:47) at

homework4.HomeWork4.main(HomeWork4.java:26)

/Users/xiomarahenriquez/Library/Caches/NetBeans/8.2/executor-snippets/run.xml:53:

Java returned: 1 BUILD FAILED (total time: 0 seconds)"

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;

}

我认为导致问题的原因是在异常堆栈跟踪的第一行中:

Exception in thread"main" java.util.InputMismatchException

这是InputMismatchException文档的链接。我不确定,因为我不知道您的输入文件是什么样子,但是我很确定当您调用nextInt()时,下一个令牌读取不是可以转换为< x1>。我的猜测是扫描仪遇到某些文本或其他阻止其返回int的文本。为了弄清楚是哪个令牌导致了问题,我尝试将您对nextInt()的调用包装在try / catch块中。当扫描程序抛出InputMismatchException时,它不会传递导致异常的令牌,因此在引发异常之后,您可以获取令牌的值(如使用next()方法一样)或完全跳过令牌。这是一个示例(我目前无法访问IDE,因此尚未经过测试,但希望您能理解):

//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...

顺便说一句,如果您不确定自己要获取的令牌是您认为将要使用的类型(在您的情况下为int),则包装该部分令牌可能是一个好主意。在try / catch块中编写代码,以便您可以处理令牌不是您认为的那样的情况。

这是我的第一个答案。希望能帮助到你。

在while循环中,您运行两次checkNumber方法。没必要只需执行一次,如下所示。 ++ i和i ++之间也有细微差别,因此请检查此链接:for循环(Java)中的i ++和++ i有什么区别?

while (sc1.hasNext()) {

atomicNumber = sc1.nextInt();

if(checkNumber(atomicNumber)== true){

valid++;

} else {

invalid++;

}

totalProcessed++;

}

谢谢您的链接和您的建议:)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值