输入数字后出现java.lang.NumberFormatException错误

输入数字后出现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(

在这一点上,我觉得自己很愚蠢,因为我无法找出最有可能是一个简单的解决方案。我一直收到错误“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)“输入我要输入的数字数量后。这个问题的其他解决方案似乎对我并不适用。谢谢你的帮助

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]
似乎未使用,因此可能它和前面阅读的
编号
根本不应该存在?虽然此链接可以回答问题,但最好在此处包含答案的基本部分,并提供链接供参考。如果链接页面发生更改,则仅链接的答案可能无效-