输入数字后出现java.lang.NumberFormatException错误
在这一点上,我觉得自己很愚蠢,因为我无法找出最有可能是一个简单的解决方案。我一直收到错误“Exception in thread”main“java.lang.NumberFormatException:For input string:” 位于java.base/java.lang.NumberFormatException.forInputString(NumberFormatException.java:68) 位于java.base/java.lang.Integer.parseInt(Integer.java:662) 位于java.base/java.lang.Integer.parseInt(Integer.java:770) 在searchSorting.main(searchSorting.java:15)“输入我要输入的数字数量后。这个问题的其他解决方案似乎对我并不适用。谢谢你的帮助输入数字后出现java.lang.NumberFormatException错误,java,arrays,error-handling,Java,Arrays,Error Handling,在这一点上,我觉得自己很愚蠢,因为我无法找出最有可能是一个简单的解决方案。我一直收到错误“Exception in thread”main“java.lang.NumberFormatException:For input string:” 位于java.base/java.lang.NumberFormatException.forInputString(NumberFormatException.java:68) 位于java.base/java.lang.Integer.parseInt(
import java.util.Scanner;
import java.util.Arrays;
public class searchSorting
{
public static void main (String[]args)
{
String line;
int number, search, item, array[], first, last, middle;
Scanner in = new Scanner(System.in);
System.out.print("How many numbers you want to input?: ");
number = in.nextInt();
array = new int [number];
item = Integer.parseInt(in.nextLine());
double[] values = new double[item];
for (int i = 0; i < values.length; i++) {
System.out.print("Input number " + i + ": ");
values[i] = Double.parseDouble(in.nextLine());
}
for (int index = 0; index < 5; index++)
System.out.print(values[index] + " ");
in.nextLine();
Arrays.sort(values);
System.out.println("Sorted number is: " + Arrays.toString(values));
System.out.println("Enter the number you are looking for?");
search = in.nextInt();
first = 0;
last = (item - 1);
middle = (first + last)/2;
while( first <= last )
{
if ( array[middle] < item )
first = middle + 1;
else if ( array[middle] == item )
{
System.out.println(item + " found at location " + (middle + 1) + ".");
break;
}
else
{
last = middle - 1;
}
middle = (first + last)/2;
}
if ( first > last )
System.out.println(item + " is not found.\n");
}}
import java.util.Scanner;
导入java.util.array;
公共类搜索排序
{
公共静态void main(字符串[]args)
{
弦线;
整数,搜索,项,数组[],第一,最后,中间;
扫描仪输入=新扫描仪(系统输入);
System.out.print(“要输入多少个数字?”:”;
number=in.nextInt();
数组=新整数[数字];
item=Integer.parseInt(in.nextLine());
double[]值=新的double[项目];
对于(int i=0;i
您称之为:
number = in.nextInt();
假设用户键入123并输入,此调用将使用123并将输入流保留在行尾字符之前
下一个相关代码是
item = Integer.parseInt(in.nextLine());
nextLine调用使输入流前进到行尾,返回它在途中传递的所有字符。由于在123之后立即按下ENTER键,因此返回的值是emoty字符串。这不是一个整数
你需要回顾一下你的策略,有时扫描数字(nextInt),有时扫描linr的其余部分(nextLine)。将两者混合起来需要非常小心。最好还是坚持使用数值方法(nextInt/nextDouble)
例如,替换此
item = Integer.parseInt(in.nextLine());
由此
item = in.nextInt();
自动处理行尾
根据评论中的讨论: 我仍然不明白为什么会有我的输入 该值将在下一行再次显示 从最初的问题开始,假设您是如何修改代码的:这是因为您编写的代码读取了两次数字:
System.out.print("How many numbers you want to input?: ");
number = in.nextInt(); // **** first input ****
array = new int [number];
item = in.nextDouble(); // **** second input ****
double[] values = new double[item];
每次在.nextSomething()中调用时,扫描仪将读取更多输入。可能就是这样:
System.out.print("How many numbers you want to input?: ");
number = in.nextInt();
array = new int [number];
double[] values = new double[number];
要了解更多信息,请查看和获取文档,这是一个极好的资源
编辑:尝试删除第15行,并将下一行中的item
替换为number
为什么使用item=Integer.parseInt(in.nextLine())
而不是.nextInt()中更直接的项代码>?我这样做了,但现在我的输入编号0:不再打印,谢谢你的额外解释!这解决了错误问题,但现在“Input number 0:”不再显示在下一行中。这是我不使用Scanner而使用BufferedReader的原因之一。当然,如果我希望像许多用户所期望的那样使用面向行的UI(因此:提示,然后重复读取该输入),那么我将逐行读取并解析该行。从SO中的许多初学者帖子中,很难理解通过令牌扫描的概念。它表面上很吸引人,但对粗心的人来说却有陷阱。@kayaruth-你说的“不出现在下一行”是什么意思-在什么之后?您的代码最初提示输入“多少个数字”,期望读取2个值(“数字”和“项目”),然后进入循环,在循环中提示输入“输入数字N”。那么-你在第一次提示后键入了2个数字吗?这个数组array=newint[number]
似乎未使用,因此可能它和前面阅读的编号
根本不应该存在?虽然此链接可以回答问题,但最好在此处包含答案的基本部分,并提供链接供参考。如果链接页面发生更改,则仅链接的答案可能无效-