我正在编写一个程序,它接受来自文件的输入,并打印城市及其降雨量的列表。我在确定阵列长度和城市降雨量数据的扫描仪上遇到了麻烦。
我一直得到这个例外
在java.util.scanner.throwfor(scanner.java:909)在java.util.scanner.next(scanner.java:1530)在java.util.scanner.nextInt(scanner.java:2160)在java.util.scanner.nextInt(scanner.java:2119)在barchart.main(barchart.java:29)在java.util.scanner.nextInt)在java.util.scanner.throwfor(scanner.java:909)
下面是我的代码:
import java.util.Scanner;
public class BarChart
{
public static void main (String[] args)
{
//create scanner
Scanner scan = new Scanner(System.in);
//create size variable
int size = scan.nextInt();
//create arrays to hold cities and values
String[] cities = new String [size];
int[] values = new int [size];
//input must be correct
if (size > 0)
{
//set values of cities
for(int i=0; i<size; i++)
{
cities[i] = scan.nextLine();
}
//set values of the data
for(int j=0; j<size; j++)
{
values[j] = scan.nextInt();
}
//call the method to print the data
printChart(cities, values);
}
//if wrong input given, explain and quit
else
{
explanation();
System.exit(0);
}
}
//explanation of use
public static void explanation()
{
System.out.println("");
System.out.println("Error:");
System.out.println("Input must be given from a file.");
System.out.println("Must contain a list of cities and rainfall data");
System.out.println("There must be at least 1 city for the program to run");
System.out.println("");
System.out.println("Example: java BarChart < input.txt");
System.out.println("");
}
//print arrays created from file
public static void printChart(String[] cities, int[] values)
{
for(int i=0; i<cities.length; i++)
{
System.out.printf( "%15s %-15s %n", cities, values);
}
}
}
在您的文件中,如果列表的大小是第一行的唯一内容,换句话说,如下所示:
2
London
Paris
1
2
然后,当您进入for循环读取城市名称时,扫描仪还没有读取第一个换行符。在上面的示例中,对newline()
的调用将读取空行和London
,而不是London
和Paris
。
因此,当您进入第二个for循环读取降雨数据时,扫描仪还没有读取最后一个城市(在上面的示例中是Paris
),并且会抛出inputMismatchException
,因为城市名称显然不是有效的int
。
问题内容: 发生异常时,如何使扫描仪重试? 考虑此应用程序在CLI模式下运行。 例: 如果用户未输入类型输入,则抛出错误。但我想在错误消息出现之后。应该要求用户再次输入 宽度 。 怎么做? 问题答案: 如果我对您的理解正确,则希望该程序在失败后要求用户重新输入正确的输入。在这种情况下,您可以执行以下操作: 注意:您 只能 捕获并重试一次。这些方法会引发其他异常,如果您尝试重试这些异常,则您的应用程
我已经尝试过了,但没有找到任何可以理解的解决方案(我对java非常陌生,这对我来说很难),或者自己解决它。以下是完整的代码(我知道代码不是那么高效): 正如您所看到的,我试图自己解决它,甚至在一些代码上添加了注释,但当它运行到方法并返回时,它失败了,因为扫描器认为在我写东西之前有东西要扫描。这里有个例外-
问题内容: 我收到以下异常。 java.util.NoSuchElementException:找不到行 我在编写一个需要从文本文件读取的较大程序时遇到了此错误,因此决定进行测试。 而且我仍然得到例外。我在与名为stricts.txt的类相同的文件夹中有一个文本文件,其中包含文本。我究竟做错了什么? 问题答案: 新的File(“ restrictions.txt”)将在应用程序的“开始目录”中查找
问题内容: 在AST扫描过程中,我正在寻找一个文件: (路径名称已更改为匿名) Java类非常简单,仅包含几个注释,可能可以针对Java 6进行编译。我在SonarQube 5.6中使用Java插件的4.0版。 是否想到为什么会这样? 问题答案: 我能够解决此问题。扫描使用SonarQube插件在Jenkins上运行。同时在同一工作空间中触发了第二个作业,这导致工作空间被Jenkins作业清除(已
我有一个类,它创建多个对象,并将它们放入中,如下所示: 我有一个应用程序,它从控制台扫描输入“add”,如果找到,就调用方法,如下所示: 应用程序应该允许用户输入“add”,但在调用方法后,将出现错误“no line found”。 我猜这是因为方法中的没有关闭,然后在需要时重新打开。这是程序的问题吗?如果是,我该如何修复它? 请注意,这个程序还没有完成,因为我将添加一个出售这些股票的销售方法。这