- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
程序运行成功,但是一旦提示用户在最后使用封装整个程序的 while 循环再次重新运行程序,它就会抛出 NoSuchElementException,尽管在这个论坛上阅读了几个线程,但我还是不能明白为什么。任何帮助将不胜感激。
import java.util.Scanner;
import java.util.Date;
import java.text.SimpleDateFormat;
import java.text.NumberFormat;
public class billingStatement {
public static void main(String[] args) {
String again="y";
while (again.equalsIgnoreCase("y"))
{
//Declare Variables
String userName="", dateIn="";
int month=0, date=0, year=0;
// Billing Statement Header
System.out.println("Southwest Power and Light");
System.out.println("Billing Statement");
//Date, Create Template, Print Result
Date now = new Date();
SimpleDateFormat todaysDate = new SimpleDateFormat("MM/dd/yyyy");
System.out.println("\n"+"Date: " + todaysDate.format(now));
//Initialize Scanner
Scanner scan = new Scanner(System.in);
boolean validName = false;
while (validName!= true)
{
System.out.print("Please enter your name (Last, First): ");
try
{
userName = scan.nextLine();
validName = true;
}
catch (Exception invalidName)
{
int loopCount=0;
loopCount++;
System.out.println("Unexpected input type. Please enter a valid name.");
if (loopCount==2) validName = true;
}
}
// Loop prompt until input's valid
boolean validDate = false;
while (!validDate)
{
try
{
System.out.print("Meter reading date (mm/dd/yyyy): ");
dateIn = scan.nextLine();
SimpleDateFormat sdf = new SimpleDateFormat("MM/dd/yyyy");
sdf.setLenient(false);
sdf.parse(dateIn);
validDate = true;
}
catch (Exception invalidDate)
{
System.out.println("Unexpected input. Please enter a valid date.");
}
}
// Use Delimiter
Scanner scanDate = new Scanner(dateIn);
scanDate.useDelimiter("/");
month = scanDate.nextInt();
date = scanDate.nextInt();
year = scanDate.nextInt();
scanDate.close();
//Meter Reading User Input
double powerUsed = 0;
boolean validDouble = false;
while (!validDouble)
{
try
{
Scanner scanD = new Scanner(System.in);
System.out.print("Electricity used (KW): ");
powerUsed = scanD.nextDouble();
validDouble = true;
scanD.close();
}
catch (Exception invalidDouble)
{
int loopCount=0;
loopCount++;
System.out.println("Unexpected input. Please enter a valid number.");
if (loopCount==2) validDouble = true;
}
}
//Calculate base rate via Meter Read Date
double baseRate = 0;
switch (month)
{
case 1: //January
baseRate=0.10;break;
case 2: //February
baseRate=0.10;break;
case 3: //March
baseRate=0.12;break;
case 4: //April
baseRate=0.12;break;
case 5: //May
baseRate=0.12;break;
case 6: //June
baseRate=0.15;break;
case 7: //July
baseRate=0.15;break;
case 8: //August
baseRate=0.15;break;
case 9: //September
baseRate=0.15;break;
case 10: //October
baseRate=0.15;break;
case 11: //November
baseRate=0.15;break;
case 12: //December
baseRate=0.10;break;
}
//Currency Format
NumberFormat currency = NumberFormat.getCurrencyInstance();
double totalCharge = 0;
double baseLineCharge = 0;
double baseCharge = (baseRate*powerUsed);
if(powerUsed<350)
{
baseLineCharge = powerUsed*baseRate;
}
if(powerUsed>350)
{
baseLineCharge = 350*baseRate;
}
//Calculate Total Monthly Charge for Power>350 KW
if (powerUsed<350)
{
totalCharge = baseCharge;
}
//Calculate Total Monthly Charge for 500 KW>Power>350 KW
if (powerUsed>350 & powerUsed<500)
{
totalCharge = ((baseRate*350)+((powerUsed-350)*(baseRate*1.10)));
}
//Calculate Total Monthly Charge for Power>500 KW
if (powerUsed>500)
{
double pieceChargeOne = (baseRate*350);
//System.out.println(currency.format(pieceChargeOne));
double pieceChargeTwo = ((150)*(baseRate*1.10));
//System.out.println(currency.format(pieceChargeTwo));
double pieceChargeThree = ((powerUsed-500)*(baseRate*1.25));
//System.out.println(currency.format(pieceChargeThree));
totalCharge = pieceChargeOne+pieceChargeTwo+pieceChargeThree;
}
//Print Output
System.out.println("\nName: "+ userName);
System.out.println("Meter Reading Date: " + month + "/" + date + "/" + year);
System.out.println("Electricity Used (KW): "+ powerUsed);
System.out.println("Baseline Charge: "+ currency.format(baseLineCharge));
//System.out.println("Over base Charge: "+currency.format(((powerUsed-350)*(baseRate*1.10))));
System.out.println("Total Amount Due: "+ currency.format(totalCharge));
// Prompt user for calculating another bill
Scanner scanAgain = new Scanner(System.in);
System.out.print("Calculate another bill (y/n)? ");
again = scanAgain.nextLine();
scanAgain.close();
scan.close();
}
}
这是创建 NoSuchElementException 的 block 。 scanAgain 扫描器不会读取其上方的 System.out.print 行。悲伤的一天。
// Prompt user for calculating another bill
Scanner scanAgain = new Scanner(System.in);
System.out.print("Calculate another bill (y/n)? ");
again = scanAgain.nextLine();
scanAgain.close();
scan.close();
}
}
异常
Exception in thread "main" java.util.NoSuchElementException:
No line found at java.util.Scanner.nextLine(Unknown Source) at
billingStatement.main(billingStatement.java:173) –
最佳答案
关闭(例如 scanDate.close();
)Scanner
也会关闭底层流 (System.in
)。当您还没有完成从流中读取时,您不应该这样做。
关于java - NoSuchElementException异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13063047/
此查询由 2 个相关问题组成。在进行下一步之前,我需要等待元素不可见,因此我尝试定义一个自定义方法,如下所示: public void waitToDisappear(long timeOutInSe
所以我有一个一年前编写的相当大的 java 应用程序,我试图再次理解它。我正在查看代码中的一个方法,其中明显存在出现 NoSuchElementException 的风险:我正在使用任意字符串构造的扫
我开始通过简单地读取数据文件来做练习。当我运行该程序时,数据文件被读取但没有读取,但出于某种原因我仍然收到“NoSuchElementException”并且我的输出没有按照预期的方式格式化。这是正在
我正在尝试逐行读取一个大型 csv 文件,以查找其中字符串出现的次数。 这是执行此操作的代码: public int getOffset(File file, String searched) thr
我的代码在使用扫描仪的每一行上都给出了 NoSuchElementException 异常。我的其余代码工作正常。 import java.io.*; import java.util.*; impo
当我运行我的程序时,我在 Eclipse 控制台中得到了这个: Type a number then press enter. 1. Add a customer 2. Add an order 3.
我想知道是否有人可以帮助解决我的程序中的 NoSuchElements 异常,该程序扫描非常大的文本,然后将其添加到 ArrayList 中。 我尝试重新排列代码的顺序,看看是否可以修复它,但现在我不
for (final ArrayList smartPhones : smartPhonesCluster) { new Thread(new Runnable() { @Ov
我想在客户端读取时设置超时。该例程应该抛出 InterruptedIOException,但它在 System.out.println("echo: " + _in.nextLine()); 上抛出
我在功能检查冲突方面遇到问题。无论我做什么,它都会抛出 NoSuchElementException。这是: public boolean isColliding(Pixel a) { if(
如果在读取文件时缺少字段,我应该捕获 NoSuchElementException。如果缺少一个字段,我只需要跳到文件的下一行。我的问题是,我在哪里实现我的 try/catch 代码来做到这一点?这是
我正在开发一种解析器(业余爱好项目),它采用 Cpp 文件,读取文件中的注释,然后尝试基于该文件创建头文件。 我面临的问题是当java.util.Scanner即将读取第一行时。程序停止并给出 NoS
我的任务是: 创建一个包含 2 列数字的文件:距离和速度。 编写一个 TravelInfo 类,其中包含三部分信息:速度、时间、距离。 该类还应该有一个方法 calcTime(),用于根据距离和速度计
在过去的几个小时里,我一直对迭代器感到震惊。 当我执行Iterator时,得到NoSuchElementException 代码 new Thread() { @Overrid
我尝试了许多不同的方法来修复该错误。我知道这与 hasNext 有关,我只是不确定错误在哪里。请帮忙。另外,如果有人能告诉我如何从 getLargestQuantityItem 方法将变量larges
代码在 Gitbash 命令行 (GitHub) 中正确运行。但是,当我在 NetBeans 中编译并运行它时,它给出了 NoSuchElement Exception。如果有人可以帮助我使用 Net
从队列中删除时,我有时会收到 NoSuchElementException 。我需要使用锁/等待/其他一些延迟机制吗? 我提供了代码的粗略翻译。 带队列的线程 public void run(){ w
如何删除代码中的 NoSuchElementException ?我也在应用 hasNextLine 但它也没有接受它。 public static void main (String[] a
我已经做了一些研究,但一无所获。 这是我的代码: public void play(){ System.out.print("Make your choice ( R - P - S) : "
自从我醒来以来,我一直在尝试让它工作,但我根本无法弄清楚是什么导致了这个异常。 try { scan = new Scanner(new File("dictionary.txt"))
我是一名优秀的程序员,十分优秀!