当前位置: 首页 > 知识库问答 >
问题:

JAVA-Main方法中的逻辑错误

严玉泽
2023-03-14
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;
 }

共有1个答案

司马洲
2023-03-14

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

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

下面是InputMisMatchException文档的链接。我不能肯定,因为我不知道输入文件是什么样子,但我非常肯定,当您调用nextint()时,下一个读取的令牌不能转换为int。我的猜测是扫描器遇到了一些文本或其他东西,阻止它返回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...
 类似资料:
  • 问题内容: 关于启动应用程序作为入口点,主要方法是Java应用程序中最重要的方法。使用此方法之前会发生什么尚不清楚。请有人可以通过以下方法签名来纠正我的看法,从而帮助我理解/阐明使用该方法之前发生的情况: JVM创建至少一个将访问您的主方法的对象。这个(假定的)对象尝试根据该API来访问Java应用程序,该API显然会将您绑定到已知的方法签名 您是否不能限制JVM上的(假定的)单独对象访问包含主要

  • 此方法的任务是从数组中移除要移除的值。剩下的元素应该只向数组的开头移动。(数组的大小不会改变。)由于数组现在少了一个元素,最后一个元素的位置应该用0填充。如果数组中有多个toRemove的匹配项,则只应移除第一个匹配项。方法没有返回值,如果数组没有元素,它应该只是没有效果。 解决方案: 我不明白这个算法是如何工作的。boolean的使用让我感到困惑,我觉得我不完全理解原始数据类型是做什么的,我知道

  • 问题内容: 对于以下代码,为什么打印A,B?我希望它能打印B,B。而且,由JVM执行的方法调用是动态还是静态评估? 问题答案: 重载由编译器 静态 确定。 重写 是在执行时完成的,但这不是这里的因素。 的静态类型为A,因此第一个方法调用解析为。

  • 问题内容: 我们需要使用Java进行逻辑回归。我们在Python http://blog.smellthedata.com/2009/06/python- logistic-regression- with-l2.html中 使用了此代码,并且基本上希望在Java中使用相同的代码。我被定向到Weka,但许可是非商业性的。 我发现Omegahat API具有像Scipy这样的BFGS最小化器,但我无

  • 我已经有一段时间没有编程了,我正在努力回到事情的转折点,这就是我已经走了多远。我的问题是,我如何循环第二个问题,这样,如果回答不是肯定的,它会再次问这个问题。我曾尝试在if语句周围放置一个循环,但每当我尝试从用户那里获得另一个响应时,它告诉我无法使用变量response来执行此操作。我觉得这是一个简单的修复,因为我理解循环,但我有一个困难的时候围绕着这个具体的问题我的头,提前谢谢你。

  • 我正在从书本上学习java,我遇到了一个逻辑问题,我知道代码没有它可能的那么有效,但我想了解这个问题,这样我就可以更好地了解Java是如何工作的,并避免将来出现更复杂的问题。 我正在尝试编写的程序应该读取账户余额和利率,然后在一年和两年后给出余额。 第二年的利率应按第一年起的总额计算。 但我的计划只是在第一年到第二年增加相同数额的利息。如果余额是6000,利息是4.25,我第一年得到6255.0,