找不到java.util.Scanner的符号hasNextInt?

时间:2013-09-10 13:14:36

标签: java

我自己学习Java,遇到了一个我想解决的问题。这是问题所在:

  

使用方法Calculator编写名为int sum(String s)的类。字符串s包含一组由空格分隔的整数(空格,制表符或换行符)。返回整数之和。

     

您可以使用Scanner对象来解决此问题。创建new Scanner(s)并将其存储在变量中,例如in。然后,使用in.hasNextInt()来控制while循环。 while循环的每次迭代都使用in.nextInt()从字符串s获取下一个整数。将此整数累加到变量中,并在循环退出时返回该变量。

     

您可以使用main方法测试您的方法,方法是创建Calculator类的实例,并使用该实例调用sum(…)几个值组合。


到目前为止,我的代码是

import java.util.Scanner;

public class calculator{
    public int sum(String s){
        new Scanner(s);
        String in = s; 
        while (s.hasNextInt()) {
            s = in.nextInt();
        }
        return(0);
    }
}

当然还没有完成,但我收到错误说

  

无法找到符号:方法hasNextInt()

任何想法为什么?从现在开始,我不太清楚该怎么做,所以有人能指出我正确的方向吗? s已正确存储到in吗?

10 个答案:

答案 0 :(得分:56)

您的变量声明:

new Scanner(s);
String in = s; 

非常错误。您必须将扫描仪存储在变量中,这意味着:

Scanner myScanner = new Scanner(s);

然后

while (myScanner.hasNextInt())

答案 1 :(得分:17)

如果你不将它存储在某处,那么创建一个new Scanner(s)就不会有太大作用。分配似乎要求您将 it (而不是s)存储在名为in的变量中:

Scanner in = new Scanner(s);

之后,您不应该再次直接与s打交道:Scanner可以为您完成工作。

在您的代码中,sString,因此它没有hasNextInt()nextInt()等方法。您应该在in上调用那些应该是Scanner的人(这是错误的直接原因)。

答案 2 :(得分:5)

您正在String上调用该方法。

您需要在hasNextInt()上调用Scanner方法:

Scanner sc = new Scanner(s);
while (sc.hasNextInt()) {
   int i = sc.nextInt();
}

答案 3 :(得分:4)

您需要在Scanner对象上调用hasNextInt()方法而不是String对象s

    Scanner sc = new Scanner(s);
    int i = 0;
    while (sc.hasNextInt()) {

       i = sc.nextInt();

     }

答案 4 :(得分:4)

创建新的扫描仪不会做任何事情,您需要将其存储在Scanner类的某个对象中。

扫描仪输入=新扫描仪; 之后,扫描仪将为您完成工作。

此外,String没有像hasNextInt()和nextInt()这样的方法。您需要使用Scanner对象访问这些方法,最后需要关闭扫描程序。

import java.util.*;

public class Abc{

  public static void main(String[] args) {

     String s = "Hello World";
     Scanner scanner = new Scanner(s);

     while (scanner.hasNext()) {
         System.out.println("" + scanner.hasNextInt());
     }
     scanner.close();
  }
}

要读取输入,您还可以使用BufferedReader。

答案 5 :(得分:3)

您尝试在String对象的'。

上使用方法hasNextInt()

String Objects没有这样的方法。因此错误是正确的。

我假设你想使用扫描仪,所以你应该创建一个新的Scanner对象:

Scanner scanner = new Scanner(s);

您需要将扫描仪对象存储在变量中 - 否则您将丢失扫描仪对象而无法使用它。这就像建立一个很酷的小工具,但忘记你把它存放在你家里的地方。

然后你可以使用方法

scanner.hasNextInt()

是扫描仪的一部分,可以满足您的需求。 现在循环使用应该会更好。

答案 6 :(得分:1)

您错误地使用了扫描仪。 访问Javadoc for Scanner here。它提供了一些例子

以下是对您的代码的更新

Scanner scanner = new Scanner(s);
while (scanner.hasNextInt()) {
   int i = sc.nextInt();
}

答案 7 :(得分:0)

您必须将Scanner个对象存储在某个变量中,然后使用hasNextInt,就像这样

import java.util.Scanner;
public class calculator{
  public int sum(String s){
    Scanner myScanner = new Scanner(s);
    int total = 0;
    while (myScanner.hasNextInt()) {
      total += myScanner.nextInt();
    }
    return(total);
  }
}

答案 8 :(得分:0)

第1点。

编写new Scanner(s);将执行Scanner构造函数并创建一个对象。

但是,不将它分配给任何相同类型的变量将最终导致您从内存中丢失此对象。任何你以后都不能推荐/使用它。

现在点2,

由于对象s的类型为String而String类没有hasNextInt()的定义,因此您最终会出现错误cannot find symbol : method

第3点,

hasNextInt()是类Scanner的属性,因此如果您创建类Scanner的对象并正确关联相同类型的变量,您可以直接使用它..eg

Scanner scnr = new Scanner(s);
if(scnr.hasNextInt())
..
....

答案 9 :(得分:-2)

import java.util.*;

public class Calculator {

    public static void main(String[] args) 
    {
        String s = "";

        // create a new scanner with the specified String Object
        Scanner scanner = new Scanner(s);

        // call the method
        while (scanner.hasNext()) 
        {
            // check if the scanner's next token is an int
            System.out.println("" + scanner.hasNextInt());

            // print what is scanned
            System.out.println("" + scanner.next());
        }

        // close the scanner
        scanner.close();
    }
}