【问题标题】:Integers.parseint( on scanner input ), also i want to make limits so user can only input number in range from 0 to 100Integers.parseint(在扫描仪输入上),我也想做出限制,所以用户只能输入 0 到 100 范围内的数字
【发布时间】:2012-07-10 10:14:37
【问题描述】:

大家好,我这里有一点问题, 首先,我想将来自扫描仪的字符串解析为 int,以便稍后使用 IF 语句。 代码如下所示

List<String> list = new ArrayList<String>();
    Scanner numbers = new Scanner(System.in);

    do {
        System.out.println("Current list is " + list);
        System.out.println("Add more? (y/n)");

        if (numbers.next().startsWith("y")) 
        {
            if(Integer.parseInt(numbers)> 0 && Integer.parseInt(numbers) < 101)
            {// i get error on above line, and im kinda lost here


                System.out.println("Enter : ");
                list.add(numbers.next());
            }
        }
        else
        {            
            break;                
        }           
    }while (true);

任何帮助表示赞赏,希望我能清楚自己的问题和我的问题

编辑:

        do {

        System.out.println("Current list is " + list);
        System.out.println("Add more? (y/n)");

        if (numbers.next().startsWith("y")) 
        {                               
            System.out.print("Enter: "); 
            System.out.flush();                
            final int n = Integer.parseInt(numbers.next());
            if (n > 0 && n < 101) 
            {
                list.add(n);
                // this is where i get the error.

                //no suitable method found for add(int)
                // method java.util.List.add(int,java.lang.String) is not applicable
                // (actual and formal arguments lists differ in length)
                // method java.util.List.add(java.lang.String) is not applicable
                // (actual argument int cannot be converted to java.lang.String 
                // by method invocation conversion).

                // end of log
            }
            else
            {
                System.out.println("Number you have entered exceeds raange between 0-100");
            } 
        }
        else
        {            
            break;                
        }           
    }while (true);

【问题讨论】:

    标签: java parsing integer java.util.scanner


    【解决方案1】:

    我猜你想写

    System.out.print("Enter: "); System.out.flush();
    final int n = Integer.parseInt(numbers.next());
    if (n > 0 && n < 101) list.add(n);
    

    java.util.Scanner 还包含nextInt 方法,它不需要Integer.parseInt。你可以直接说numbers.nextInt()

    您还需要将您的列表声明从List&lt;String&gt; 更改为List&lt;Integer&gt;

    【讨论】:

    • 您需要发布您的确切代码并发布确切的错误堆栈跟踪。
    • 感谢您的回复 Marko,问题出在 list.add(n) 这是它引发错误的地方,当我将其更改为 list.add(numbers.next()) 时有效,但让我输入两次相同的数字。错误:线程“main”中的异常 java.lang.RuntimeException:无法编译的源代码 - 错误的符号类型:java.util.List.add atassess1grade.GradeCalculator.readGrade(GradeCalculator.java:44)
    • 您应该通过编辑您的问题并正确格式化来发布这些内容。我不完全理解这个例外。发布完整的堆栈跟踪。
    • java 无法将 int 自动转换为 String 它可以将 int 自动装箱为可以转换为 String 的 Integer,但它不会在 add 行中执行此操作。您有 2 个可能的修复:(1)将您的列表更改为 List 因此在调用 list.add(n) 时 int n 将自动装箱为 Integer 并添加(2)更改行 list.add(n ) to list.add(""+n) 这可以java句柄来创建一个String
    【解决方案2】:

    您正在尝试将非整数(字符串)解析为整数,在输入为非整数的情况下会抛出 NumberFormatException

    int n=0;
    
    try
    {
    n = Integer.parseInt(numbers.next());
    }catch(Exception e)
    {
    }
    
    if(n > 0 && n<101)
    {
    //your logic
    }
    

    【讨论】:

      猜你喜欢
      • 2016-06-20
      • 1970-01-01
      • 2015-10-22
      • 1970-01-01
      • 2014-09-18
      • 2016-08-24
      • 1970-01-01
      • 1970-01-01
      • 2016-06-12
      相关资源
      最近更新 更多