2015-11-03 109 views
0

当前我得到java.lang.NumberFormatException:错误。我无法修复它。解决java.lang.NumberFormatException:错误

这里是我当前的代码:

import java.util.*; 
import java.lang.*; 
/** 
    * Write a description of class Square here. 
    * 
    * @author (your name) 
    * @version (a version number or a date) 
*/ 
public class Square { 

public static void main(String[] args) { 
    Scanner firstInput = new Scanner(System.in); 
    Scanner secondInput = new Scanner(System.in); 

    String n = firstInput.next(); 
    n = n.replaceAll("[*0-9]",""); 
    int b = Integer.parseInt(n); 


    int[] squares = new int[b]; 
    int[] squared = new int[b]; 

    for(int i = 0; i <= squares.length - 1; i++) { 
     System.out.print("Write square number " + (i + 1) + " : "); 
     squares[i] = secondInput.nextInt(); 
    } 

    for(int j = 0; j <= squares.length - 1; j++) { 
     squared[j] = squares[j] * squares[j]; 
    } 

    System.out.print("The square of inputted numbers are: "); 

    for(int k = 0; k <= squared.length - 1; k++) { 
     System.out.print(squared[k] + " "); 
    }  
    } 
} 

这里是我得到的错误:

java.lang.NumberFormatException: For input string: "java" 
    at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65) 
    at java.lang.Integer.parseInt(Integer.java:580) 
    at java.lang.Integer.parseInt(Integer.java:615) 
    at Square.main(Square.java:17) 

本质上,将用户输入的“Java广场5”为例,它将检测值5,将数组的大小设置为5,然后向该人询问他/她想要平方的5个数字。

以上规定的工作只有整数,但是当我放入一个字符串时,它停止工作。

任何帮助,将不胜感激!

注:我知道我的代码可能是蹩脚的,我还在学习!

+0

考虑减少你的问题到一个[mcve](http://stackoverflow.com/help/mcve),你可能会自己回答你的问题。使用[文档](http://docs.oracle.com/javase/7/docs/api/)找出为什么'Scanner.nextInt()'抛出'NumberFormatException' – BeyelerStudios

+0

嗨,谢谢你的回应,我一直在查看文档,但我无法理解它。 –

回答

0

你应该只有一个扫描仪。两台扫描仪正在相互竞争从System.in中读取。然后,您需要扫描两次以获取令牌“java”和“square”。然后,您可以开始循环以获取.nextInt()。

Scanner input = new Scanner(System.in); 
input.next(); // should be "java" 
input.next(); // should be "square" 
input.nextInt(); // should be 5 
+0

这确实有道理,但是你可能会从你说的“你需要扫描两次以获得令牌”的地方稍微弄虚作假? –

+0

我已经更新了答案。默认情况下,扫描器读取由空格分隔的令牌。 –