【问题标题】:Having trouble scanning an Int扫描 Int 时遇到问题
【发布时间】:2014-04-19 07:30:42
【问题描述】:

我是 Java 新手,正在为一些我过去从未遇到过的问题而苦苦挣扎。无论出于何种原因,我都无法在我的代码中扫描一个 int(或一个 double),但我可以很好地扫描一个字符串。我在我的扫描仪无法正常工作的地方发布了 sn-p,如果我应该包含该程序的其余部分,请告诉我。

import java.util.Scanner;
import java.io.File;
import java.io.PrintWriter;
import java.io.IOException;

public class DZP3
{
    public static void main(String[] args) throws IOException
    {
        announce();
        Scanner scan = new Scanner(System.in);
        //Prompt user for input file
        System.out.println("Greetings! Please enter the filename of the plaintext olympics     data file you'd like to open.");
        String txtFilename = scan.nextLine();

        //Opens olympics data txt file specified, exits if it does not exist
        File medalsInput = new File (txtFilename);
        if(!medalsInput.exists())
        {
            System.out.println("File not found. Reload and try again.");
            System.exit(1);
        }
        //Prompt user for output file
        System.out.println("Thanks. Please enter the filename of the plaintext data output file.");
        String outputTxt = scan.nextLine();
        //Create output file specified
        File medalsOutput = new File (outputTxt);

        //Prompt user for medal cutoff X value
        System.out.println("Thanks. Please enter the minimum number of medals a nation must have earned to be counted for calculation 2 listed above. \nEnter the value, as an integer:");
        int medalsCutoff = 0;
        medalsCutoff = scan.nextInt();
        fileProcessing(medalsInput, medalsOutput, medalsCutoff);



    }

}

在底部附近,medalsCutoff 不接受任何扫描值。我尝试将它放在main 以外的方法中,我尝试重新排列它,为它创建一个单独的扫描仪,以及其他一些东西。调试器显示,无论如何,我都停留在那行代码上。我做错了什么?我很茫然。

编辑:这是 fileProcessing 方法,以及之后的内容。宣布方法就是 system.out.println。

 public static void fileProcessing(File medalsIn, File medalsOut, int medalsMin) throws IOException
{
  //Initialize necessary variables and strings
  int maxTotMedals = -1;
  int natCountMedalsMin = 0;
  int natHiScore = -1;
  String natName;
  String answerOne = "DEFAULT";
  int answerTwo = 0;
  String answerFour = "DEFAULT";


  //Create Printwriter
  PrintWriter pw = new PrintWriter(medalsOut);
  //Create scanner to read from file, loop until end of file
  Scanner filescan = new Scanner(medalsIn);
  while (filescan.hasNext())
     {
        //Initializes medal counting variables at zero, resetting the values with each line
        int gCount = 0;
        int sCount = 0;
        int bCount = 0;
        natName = filescan.next();
        int lineMedals = 0;
        while (lineMedals < 4); //Runs 4 times to cover all four years
         {
           gCount += filescan.nextInt();
           sCount += filescan.nextInt();
           bCount += filescan.nextInt();
           lineMedals++;
         }
        int totalMedals = gCount + sCount + bCount;
        //Sees if this line's medals have exceeded previous total medal record, if yes, sets country name as answer to question one
        if (totalMedals > maxTotMedals)
           {
              answerOne = natName;
              maxTotMedals = totalMedals;
           }
        if (totalMedals >= medalsMin)
           {
              natCountMedalsMin++; //For answer two
           }    
        //Score calculation
        int natScore = gCount*3;
        natScore += sCount*2;
        natScore += bCount; 
        //Compares score to highest score, for answer four
        if (natScore > natHiScore)
           {
              answerFour = natName;
              natHiScore = natScore;
           }
        //Write nation name and score to file
        pw.println(natName + " " + natScore);           
     }

  //Define answer two after all countries have been counted
  answerTwo = natCountMedalsMin;
  //Close output file
  pw.close();
  //Send results to answer method
  answerPrint(answerOne, answerTwo, answerFour, medalsMin, natHiScore);
}

//This method outputs the answers to the user.
public static void answerPrint(String answerEin, int answerZwei, String answerVier, int medalsMini, int HiScore)
  {
  System.out.println("File read successfully.");
  System.out.println("The nation that earned the greatest number of medals is " + answerEin + ".");
  System.out.println(answerZwei + " countries earned more than " + medalsMini + " medals.");
  System.out.println("The nation with the highest score is " + answerVier + " with a score of " + HiScore + ".");
  System.out.println("Thank you for using this program. Until next time!");

}

编辑 2:这已解决,我的 fileProcessing 方法中有一个杂散分号,导致无限循环。谢谢大家的帮助。

【问题讨论】:

  • 您是否检查了这一行 System.exit(1);没有执行??
  • 卡在这行代码上是否意味着程序没有终止?
  • 对不起,我没有更具体。 System.exit(1) 仅在找不到文件时执行。它似乎工作正常。而且程序没有终止,它像柠檬一样挂在medalsCutoff = scan.nextInt(); 线上,直到我手动终止它。
  • 好吧,我试过了,它在我的电脑上运行良好..也许其他部分有问题..
  • 你能提供更多关于文件处理的细节吗?我认为可能存在问题。

标签: java java.util.scanner


【解决方案1】:
while (lineMedals < 4);

上面一行的末尾有一个分号。这是一个无限循环。

【讨论】:

  • 金牌归... ^
  • 你明白了。这是一个非常令人尴尬的错误,但我怀疑如果没有你的帮助我会抓住它。谢谢@AbhinavRanjan。我很惊讶我没有在其中乱扔更多错误。
  • @user3418631 我想你可以自己找到它。有些人只看代码就可以看出这一点。我使用调试器遍历每一行并确定导致问题的行。
【解决方案2】:

创建文件后,您可以使用以下方法 文件奖牌输出 = 新文件 (outputTxt); 奖牌输出.createNewFile()

在你的代码文件中没有创建并通过 syste.exit(1) 退出

【讨论】:

    猜你喜欢
    • 2016-02-11
    • 2017-05-17
    • 1970-01-01
    • 2017-03-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多