gpt4 book ai didi

java - While 循环读取标记时出现问题

转载 作者:行者123 更新时间:2023-12-02 06:22:08 28 4
gpt4 key购买 nike

我正在尝试使用 while 循环将文本文件中的标记列表读取到单独的变量中。

文本文件中的每一行都是:StringDoubleIntInt Boolean,有 11 行,但我在 String 行之后的 double 行收到一个 InputMisMatchException

txt 文件读取为

  1. AC 120.99 423 70 假
  2. toastr 18.99 101 30 正确
  3. toastr 11.97 201 100 false
  4. 悠悠 5.99 223 68 假等等

我尝试使用 .hasNext.hasNextLine 读取文件。当将 double 更改为 String 时,我收到下一个 Int 的错误,并将其再次更改为 String 需要错误转移到下一个 Int,但更改它不会进一步移动异常。

while (infp.hasNextLine() && count < LIMIT) {
String Product_description = infp.next();
double cost_per_item = infp.nextDouble(); //line 43
int product_id = infp.nextInt();
int quantity_at_hand = infp.nextInt();
boolean domestic_origin = infp.hasNext();
items[count] = new Item(Product_description, cost_per_item,
product_id, quantity_at_hand,
domestic_origin);
count++;
}

它应该将所有标记读入变量,并为文本文件中的每一行创建单独的对象。但从错误来看,我相信它只是读取第一个 String,然后抛出 double 的异常。

第 43 行的异常:

Exception in thread "main" 
java.util.InputMismatchException at
java.util.Scanner.throwFor(Unknown Source) at
java.util.Scanner.next(Unknown Source) at
java.util.Scanner.nextDouble(Unknown Source) at DB_Master.main(DB_Master.java:43)

最佳答案

如您所知,nextDouble 方法正在终止 double 值

double nextDouble()
Returns the next token as a long. If the next token is not a float or is out of range, InputMismatchException is thrown.

尝试以这种格式输入

喜欢:34,2 而不是 34.2

或尝试使用区域设置转换您的扫描仪

Scanner scanner = new Scanner(System.in).useLocale(Locale.US);

此类的实例能够扫描标准格式以及扫描仪区域设置格式的数字。扫描仪的初始区域设置是 Locale.getDefault() 方法返回的值;它可以通过 useLocale(java.util.Locale) 方法更改本地化格式根据以下参数定义,对于特定区域设置,这些参数取自该区域设置的 DecimalFormat 对象 df 及其 DecimalFormatSymbols 对象 dfs。

更多引用请参见 java docs

仍然无法正常工作,尝试通过检查输入类型进行解析。

//************************************************************************

// MixedTypeInput

// This application demonstrates testing before reading to be

// sure to use the correct input method for the data.

//************************************************************************



import java.io.*;

import java.util.Scanner;

public class MixedTypeInput

{

public static void main(String[] args)

{

double number;

Scanner in = new Scanner(System.in);

System.out.println("Enter your gross income: ");

if (in.hasNextInt())

{

number = (double)in.nextInt();

System.out.println("You entered " + number);

}

else if (in.hasNextFloat())

{

number = (double)in.nextFloat();

System.out.println("You entered " + number);

}

else if (in.hasNextDouble())

{

number = in.nextDouble();

System.out.println("You entered " + number);

}

else

System.out.println("Token not an integer or a real value.");

}

}

关于java - While 循环读取标记时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55825039/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com