Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 扫描程序在尝试获取下一个时抛出空指针_Java - Fatal编程技术网

Java 扫描程序在尝试获取下一个时抛出空指针

Java 扫描程序在尝试获取下一个时抛出空指针,java,Java,为奇怪的格式道歉,这是我的第一篇文章。getone()方法中正在引发null指针异常。首先是hasNext(),如果我删除了它,就在next()。为奇怪的格式道歉,这是我的第一篇文章。getone()方法中正在引发null指针异常。首先在hasNext(),如果我删除它,在next()。您是所谓变量阴影的受害者。 用线 public class ScannerTest { protected Scanner scan; public ScannerTest(String s)

为奇怪的格式道歉,这是我的第一篇文章。getone()方法中正在引发null指针异常。首先是hasNext(),如果我删除了它,就在next()。

为奇怪的格式道歉,这是我的第一篇文章。getone()方法中正在引发null指针异常。首先在hasNext(),如果我删除它,在next()。

您是所谓变量阴影的受害者。 用线

public class ScannerTest {

    protected Scanner scan;

    public ScannerTest(String s) {

        Scanner scan = new Scanner(s);

    }

    public void getone() {

        if (scan.hasNext()) {
            String temp = scan.next();
            temp = temp.replaceAll("[\\[\\](){}]", "");
            System.out.println(temp);
        }
    }

    public static void main(String[] args) {

        String s = "(abcd) (defg) (w)";
        ScannerTest test = new ScannerTest(s);
        Scanner rando = new Scanner(s);
        System.out.println(rando.next());
        System.out.println(rando.hasNext());

        test.getone();
    }
}
您正在声明局部变量扫描,而不是在ScannerTest类中初始化成员扫描。将提及的行更改为

Scanner scan = new Scanner(s); 
它将按预期工作

完整的源代码

scan = new Scanner(s); 

你是所谓可变阴影的受害者。 用线

public class ScannerTest {

    protected Scanner scan;

    public ScannerTest(String s) {

        Scanner scan = new Scanner(s);

    }

    public void getone() {

        if (scan.hasNext()) {
            String temp = scan.next();
            temp = temp.replaceAll("[\\[\\](){}]", "");
            System.out.println(temp);
        }
    }

    public static void main(String[] args) {

        String s = "(abcd) (defg) (w)";
        ScannerTest test = new ScannerTest(s);
        Scanner rando = new Scanner(s);
        System.out.println(rando.next());
        System.out.println(rando.hasNext());

        test.getone();
    }
}
您正在声明局部变量扫描,而不是在ScannerTest类中初始化成员扫描。将提及的行更改为

Scanner scan = new Scanner(s); 
它将按预期工作

完整的源代码

scan = new Scanner(s); 
替换

import java.util.Scanner;

public class SomeClass {

    protected Scanner scan;

    public SomeClass(String s) {
        scan = new Scanner(s);
    }

    public void getone() {

        if (scan.hasNext()){
            String temp = scan.next();
            temp = temp.replaceAll("[\\[\\](){}]","");
            System.out.println(temp);
        }

    }

    public static void main(String[] args) {

        String s = "(abcd) (defg) (w)";
        SomeClass test = new SomeClass(s);
        Scanner rando = new Scanner(s);
        System.out.println(rando.next());
        System.out.println(rando.hasNext());

        test.getone();

    }

}

这样就可以将
newscanner
分配给实例变量
scan
。语句
Scanner scan=newscanner正在创建一个
扫描
引用,其范围仅限于构造函数本身

此校正后的输出:

public ScannerTest(String s) {
    scan = new Scanner(s);
}
替换

import java.util.Scanner;

public class SomeClass {

    protected Scanner scan;

    public SomeClass(String s) {
        scan = new Scanner(s);
    }

    public void getone() {

        if (scan.hasNext()){
            String temp = scan.next();
            temp = temp.replaceAll("[\\[\\](){}]","");
            System.out.println(temp);
        }

    }

    public static void main(String[] args) {

        String s = "(abcd) (defg) (w)";
        SomeClass test = new SomeClass(s);
        Scanner rando = new Scanner(s);
        System.out.println(rando.next());
        System.out.println(rando.hasNext());

        test.getone();

    }

}

这样就可以将
newscanner
分配给实例变量
scan
。语句
Scanner scan=newscanner正在创建一个
扫描
引用,其范围仅限于构造函数本身

此校正后的输出:

public ScannerTest(String s) {
    scan = new Scanner(s);
}

您正在将Scanner声明为构造函数中的局部变量。因为它也有名称“scan”,所以它隐藏了字段(类级别变量),也被命名为scan。要解决这个问题,在构造器内部,只需移除扫描器部分,并保留:scan=新扫描器;您正在将Scanner声明为构造函数中的局部变量。因为它也有名称“scan”,所以它隐藏了字段(类级别变量),也被命名为scan。要解决这个问题,在构造器内部,只需移除扫描器部分,并保留:scan=新扫描器;