无法扫描Int

时间:2014-03-14 06:25:48

标签: java java.util.scanner

我是Java的新手,并且在过去从未遇到过麻烦的事情中苦苦挣扎。无论出于何种原因,我无法在我的代码中扫描int(或double),但我可以很好地扫描字符串。我发布了我的扫描仪无法正常运行的代码段,如果我应该包含剩余的程序,请告诉我。

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方法,以及之后发生的事情。 announce方法只是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方法中有一个迷路分号,导致无限循环。谢谢大家的帮助。

2 个答案:

答案 0 :(得分:1)

while (lineMedals < 4);

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

答案 1 :(得分:0)

创建文件后,使用以下方法 文件medalsOutput = new File(outputTxt); medalsOutput.createNewFile()

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

退出