首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java InputMismatchException错误

Java InputMismatchException错误
EN

Stack Overflow用户
提问于 2014-08-01 17:50:45
回答 1查看 147关注 0票数 0

我正试图为我的Java类编写一个库存程序。这个程序需要从.txt文件中读取初始库存数据(迭代一组次数--由我们正在使用的inv.txt文件中的第一个整数定义)。我的文本文件是正确的,扫描器、数组和循环似乎是正确的,但是我得到了一个InputMismatchException。

.txt文件的格式如下:

代码语言:javascript
复制
XXXX - Count - # of times to iterate


XXXX - Product Code


XXXX -Quantity On Hand


XXXX - Reorder Level

如果对每个产品重复产品代码、QOH和重新排序级别,则计数只在文件中出现一次。

必须读取所有值,并将每个值存储在各自的数组中。

代码语言:javascript
复制
import javax.swing.*;
import java.util.*;
import java.sql.*;
import java.math.*;
import java.*;
import java.io.*;

public class Lab7Test2
{
public static void main (String [] args) throws IOException
{
  int count = 0; //To hold Max Count (Max Iterations Expected)
  int countAt = 0; //To hold Current Count.
  int number = 0; //To hold a number.
  int number2 = 0; //To hold a 2nd Number.
  int index = 0; //Index Placeholder.
  int index2 = 0;
  int index3 = 0;

  int[] partNumb;
  int[] qoh; //Holds Product's Quantity On Hand (QOH)
  int[] reorder; //Minimum Reorder Level
  int[] transNumb;
  int[] transType;
  int[] transAmt;

  String[] status; //Holds Product's Inventory Status as String.
  String[] error; //Holds Error Messages associated with Transactions.
  String input;
  String output; //Holds output for transaction Log.

  Scanner keyboard = new Scanner(System.in);
  File openFile;
  Scanner scanFile;

  //----End of Variable Declaration---    /////////////////////////////////////////////

  //----Begin Program Execution----////////////////////////////////////////////////////

  System.out.println("Enter the Inventory File Name.");
  input = keyboard.nextLine();

  if(!input.contains(".txt")) //If Input has no '.txt' extension, error message.
  {
     while(!input.contains(".txt")) //Repeat error if no '.txt' extension found.
     {
        System.out.println("Invalid Input");
        System.out.println("Enter the Inventory File Name.");
        input = keyboard.nextLine();
     }
     openFile = new File(input); //Set openFile to 'input' if '.txt' extension found.
     scanFile = new Scanner(openFile);
     System.out.println("File Loaded.");
  }
  else
  {
     openFile = new File(input); //Set openFile to 'input' if '.txt' extension found.
     scanFile = new Scanner(openFile);
     System.out.println("File Loaded.");
  }

  number = scanFile.nextInt();
  number *= 3;
  partNumb = new int[number]; //Set partNumb[] Size = to count
  qoh = new int[number]; //Set qoh[] Size = to count
  reorder = new int[number]; //Set reorder[] Size = to count
  count = number;
  number = 0;

下面的循环是抛出异常的开始,特别是下面的5行: It 2= scanFile.nextInt()。只有当“count”和“number”变量设置为*3(以确保每个产品都有3个值:产品代码、手头数量、重新订购级别)时,才会出现此错误。

代码语言:javascript
复制
 while(countAt < (count * 3)) 
  {
     if(number == 0) // Number 0 = partNumb[]
     {
        number2 = scanFile.nextInt(); 
        partNumb[index] = number;
        index++;
        number++;
        countAt++;
     }
     else if(number == 1) //Number 1 = qoh[]
     {
        number2 = scanFile.nextInt();
        qoh[index2] = number;
        index2++;
        number++;
        countAt++;
     }
     else if(number == 2) //Number 2 = reorder[]
     {
        number2 = scanFile.nextInt();
        reorder[index3] = number;
        index3++;
        number = 0;
        countAt++;
     }
  }

  System.out.println("Data Loaded to Arrays"); //Confirmation of Data Acceptance.

  //Reset all Counter & Index Variables for use with next Loop.
  index = 0;
  index2 = 0;
  index3 = 0;
  countAt = 0;
  number = 0;
  number2 = 0;


  while(countAt < (count * 3))
  {
     System.out.println(partNumb[index]); //Print All Values in the partNumb[] Array.
     index++;
     countAt++;
  }


  //----END PROGRAM -----//////////////////////////////////////////////////////////////
}

}

我已经在至少3天的研究过程中尝试了无数种方法来纠正这个问题,到目前为止,我还没有想出任何方法来修正这个错误?。如果有人有任何建议,请告诉我,谢谢。

堆栈跟踪:

代码语言:javascript
复制
----jGRASP exec: java Lab7Test2

Enter the Inventory File Name.
inv.txt
File Loaded.
Exception in thread "main" java.util.InputMismatchException
at java.util.Scanner.throwFor(Scanner.java:909)
at java.util.Scanner.next(Scanner.java:1530)
at java.util.Scanner.nextInt(Scanner.java:2160)
at java.util.Scanner.nextInt(Scanner.java:2119)
at Lab7Test2.main(Lab7Test2.java:74)

 ----jGRASP wedge2: exit code for process is 1.
 ----jGRASP: operation complete.
EN

回答 1

Stack Overflow用户

发布于 2014-08-01 18:36:07

我在您的实现中发现了一些小错误。我尝试用我自己的列表,虽然我不完全确定,它是否符合您的格式。这是我的单子:

代码语言:javascript
复制
2
1000
2  
2
1001
1
3

我稍微修改了一下您的代码,但是样式很容易更好。但你以后可以这么做。我注释掉了实现的部分内容,这样您就可以很容易地看到更改。

代码语言:javascript
复制
    number = scanFile.nextInt();
    //number *= 3;
    partNumb = new int[number]; // Set partNumb[] Size = to count
    qoh = new int[number]; // Set qoh[] Size = to count
    reorder = new int[number]; // Set reorder[] Size = to count
    count = number;
    number = 0;
    //while (countAt < (count * 3)) {
    while (countAt < (count * 3)) {

        //if(number == 0) // Number 0 = partNumb[]
        if (countAt%3 == 0) // Number 0 = partNumb[]
        {
            number = scanFile.nextInt();
            partNumb[index] = number;
            index++;
            //number++;
            countAt++;
            //else if(number == 1) //Number 1 = qoh[]
        } else if (countAt%3 == 1) // Number 1 = qoh[]
        {
            number = scanFile.nextInt();
            qoh[index2] = number;
            index2++;
            //number++;
            countAt++;
            //else if(number == 2) //Number 2 = reorder[]
        } else if (countAt%3 == 2) // Number 2 = reorder[]
        {
            number = scanFile.nextInt();
            reorder[index3] = number;
            index3++;
            //number = 0;
            countAt++;
        }
    }

    System.out.println("Data Loaded to Arrays"); // Confirmation of Data
                                                    // Acceptance.

    // Reset all Counter & Index Variables for use with next Loop.
    index = 0;
    index2 = 0;
    index3 = 0;
    countAt = 0;
    number = 0;
    //number2 = 0;

    //while(countAt < (count * 3))
    while (countAt < (count)) {
        System.out.println(partNumb[index]); // Print All Values in the
                                                // partNumb[] Array.
        index++;
        countAt++;
    }

    // ----END PROGRAM
    // -----//////////////////////////////////////////////////////////////
}

如果我的文件是正确的,测试将显示正确的输出:

代码语言:javascript
复制
Enter the Inventory File Name.
C:\Users\Markus\Desktop\test.txt
File Loaded.
Data Loaded to Arrays
1000
1001

我希望这将对你的实施有所帮助。

由衷地,

最大值

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25085910

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档