对于字符串类型,未定义方法“ nextLine()”

时间:2019-10-15 16:38:07

标签: java

我正在用多种不同的方法制作程序,其中一种是:

function getParams(foo, bar, functionParam) {
  if (typeof bar === 'function') 
  {
    console.log("bar is a function");
    const result = bar(functionParam);
    console.log('function result: ', result);
  }
  console.log(typeof bar); // string: because i returned string. But why not a "function" ? 
}

function temp(element) {
  return element;
}

// Did you mean to do this?
function runThis2() {
  getParams("hello", temp, 'my function param');
}

runThis2();

我收到错误消息,“类型为String的方法“ nextLine()”未定义”

但是,扫描器明确定义在我的课程的顶部,

private static void IsWordPattern(String input) {

    String pattern = "";
    System.out.println("Enter a pattern of letters: ");
    pattern = input.nextLine();

}

我可以在主要功能中使用扫描仪而不会出现错误:

public class StringValidation {

static Scanner input= new Scanner(System.in);

我还可以在另一个私有和静态方法中使用它:

private static int Menu(int选择){

public static void main(String[] args) {

    Scanner input= new Scanner(System.in);

    System.out.println("Enter a string: ");
    String userInput = input.nextLine();

我尝试了多种方法来修复此错误,包括将Menu函数定义更改为“ private static void Menu”,但该方法也不起作用。为什么会出现此错误,我该怎么办。任何反馈都值得赞赏。

2 个答案:

答案 0 :(得分:3)

您的方法参数遮盖了您的具有相同名称的类字段。您可以更改参数名称,也可以使用this.调用class字段,例如

 pattern = this.input.nextLine();

注意:要访问静态类变量,您可以使用类名而不是this关键字,在这种情况下,它将是StringValidation.input.nextLine()

答案 1 :(得分:2)

该类中的扫描程序变量被名为input的String参数遮盖。您应该重命名功能参数,然后扫描仪再次可见。