gpt4 book ai didi

java - 使用 Scanner 对象读取一系列输入

转载 作者:行者123 更新时间:2023-12-01 14:48:29 25 4
gpt4 key购买 nike

我必须检索三个输入:整数、字符串和 double ;这是我想我会做的[注意:包含空格的字符串]

record.setAccountNumber(input.nextInt());
record.setName(input.nextLine());
record.setBalance(input.nextDouble());

我尝试替换 input.nextLine() 中的

record.setName(input.nextLine());

使用输入input.next(),由于出现InputMisMatchException,但问题仍然没有解决。抛出错误是因为 double 值可能被分配给新行值[这是我认为不确定的]有没有办法检索包含空格的字符串并能够完成我必须在同时。谢谢

注意:我找不到任何与此相关的问题让我添加发生错误的整个方法

public void addAccountRecords(){
AccountRecord record = new AccountRecord();
input = new Scanner (System.in);

try {
output = new Formatter("oldmast.txt");
} catch (FileNotFoundException e) {
System.err.println("Error creating or opening the file");
e.printStackTrace();
System.exit(1);
} catch (SecurityException e){
System.err.println("No write access to this file");
e.printStackTrace();
System.exit(1);
}


System.out.println("Enter respectively an account number\n"+
"a name of owner\n"+"the balance");

while ( input.hasNext()){
try{
record.setAccountNumber(input.nextInt());
record.setName(input.nextLine());
record.setBalance(input.nextDouble());

if (record.getBalance() >0){
output.format("%d\t%s\t%,.2f%n",record.getAccountNumber(),
record.getName(),record.getBalance());
record.setCount((record.getCount()+1));
}else
System.err.println("The balance should be greater than zero");

}catch (NoSuchElementException e){
System.err.println("Invalid input, please try again");
e.printStackTrace();
input.nextLine();

}catch (FormatterClosedException e){
System.err.println("Error writing to File");
e.printStackTrace();
return;
}
System.out.println("Enter respectively an account number\n"+
"a name of owner\n"+"the balance\n or End of file marker <ctrl> z");
}//end while
output.close();
input.close();

}//end AddAccountRecords

最佳答案

nextLine 将读取字符串末尾的所有剩余数据,包括 double 。您需要使用 next 来代替。我不确定为什么您会收到 InputMisMatchException - 例如,这有效:

String s = "123 asd 123.2";
Scanner input = new Scanner(s);
System.out.println(input.nextInt()); //123
System.out.println(input.next()); //asd
System.out.println(input.nextDouble()); //123.2

因此问题可能出在您的输入或代码中的其他位置。

注释:

  • 如果我使用 Scanner input = new Scanner(System.in); 并输入 123 asd 123.2 我会得到相同的结果。
  • 如果字符串(第二个条目)包含空格,第二个单词将被解析为 double ,并将生成错误报告

关于java - 使用 Scanner 对象读取一系列输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15139922/

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