Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/311.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_Methods_Java.util.scanner - Fatal编程技术网

是否从另一个方法调用{}中的扫描程序--JAVA

是否从另一个方法调用{}中的扫描程序--JAVA,java,methods,java.util.scanner,Java,Methods,Java.util.scanner,我的问题在于试图从另一种方法访问在一种方法中创建的扫描仪扫描。它说它找不到变量扫描。我试图声明一个全局扫描仪扫描,但它给了我一个错误,非静态变量名不能从静态上下文中引用。如何访问此变量 import java.util.*; import java.io.*; public class MyClass { public static void myMethod() { final File f = new File("file.txt"); Scanne

我的问题在于试图从另一种方法访问在一种方法中创建的
扫描仪扫描。它说它找不到变量扫描。我试图声明一个全局
扫描仪扫描
,但它给了我一个错误,
非静态变量名不能从静态上下文中引用
。如何访问此变量

import java.util.*;
import java.io.*;

public class MyClass {
    public static void myMethod() {
        final File f = new File("file.txt");
        Scanner scan = null;
        try {
            scan = new Scanner(f);
        }
        catch(FileNotFoundException ex) {
            System.exit(0);
        }
    }

    public static boolean anotherMethod() {
        final String s = scan.next ();

        if (s.equalsIgnoreCase ("true"))  return true;
        if (s.equalsIgnoreCase ("false")) return false;

        throw new java.util.InputMismatchException ();
    }
}

您只在
flow
方法中声明了
scan
变量。如果要在其他方法中使用该值,则需要采取以下两种方法之一:

  • 将其声明为非局部变量
  • 通过参数将其传递给其他方法
由于所有方法都是静态的,因此对于第一个选项,您需要将其声明为:

private static Scanner scan;
然而,目前的
flow
方法似乎做了两件截然不同的事情:

  • 它创建了
    扫描仪
    (但实际上并不使用它)
  • 它尝试使用预期已读取的数据
在我看来,您应该在
main
方法(或者在
readBoolean2D
之前调用的新方法)中创建
Scanner
。您当前正在调用
readBoolean2D
作为程序的第一个操作,试图在创建任何
扫描仪之前读取不存在的变量

请注意,所有这些都与
try
块本身无关-问题在于变量是在单独的方法中声明的(以及方法调用的时间),而不是
try

我会尝试将该计划重组为:

  • 开放输入
  • 读取所有数据
  • 处理所有数据

我怀疑你实际上可以只处理局部变量和参数——第一种方法将返回一个
扫描器
;第二种方法是使用扫描仪并返回它读取的数据;第三种方法将获取数据。

您只在
flow
方法中声明了
scan
变量。如果要在其他方法中使用该值,则需要采取以下两种方法之一:

  • 将其声明为非局部变量
  • 通过参数将其传递给其他方法
由于所有方法都是静态的,因此对于第一个选项,您需要将其声明为:

private static Scanner scan;
然而,目前的
flow
方法似乎做了两件截然不同的事情:

  • 它创建了
    扫描仪
    (但实际上并不使用它)
  • 它尝试使用预期已读取的数据
在我看来,您应该在
main
方法(或者在
readBoolean2D
之前调用的新方法)中创建
Scanner
。您当前正在调用
readBoolean2D
作为程序的第一个操作,试图在创建任何
扫描仪之前读取不存在的变量

请注意,所有这些都与
try
块本身无关-问题在于变量是在单独的方法中声明的(以及方法调用的时间),而不是
try

我会尝试将该计划重组为:

  • 开放输入
  • 读取所有数据
  • 处理所有数据

我怀疑你实际上可以只处理局部变量和参数——第一种方法将返回一个
扫描器
;第二种方法是使用扫描仪并返回它读取的数据;第三种方法将获取数据。

scan
变量必须是全局的、静态的,因为您的方法是静态的。如果您想从另一个方法,甚至是另一个类访问它,则必须全局声明它

import java.util.*;
import java.io.*;

public class VerticalPercolation {

    private static Scanner scanner;

    public static boolean[][] flow (final boolean[][] open) {
        // ...
    }

    public static boolean percolates (final boolean[][] open) {
        // ...
    }

    public static boolean[][] random (final int n, final double p, final Random rnd) {
        // ...
    }

    public static boolean readBoolean () {
        // ...
    }

    public static boolean[][] readBoolean2D () {
        // ...
    }

    public static void print (final boolean[][] a) {
        // ...
    }

    public static void main (final String[] args) {
        scanner = new Scanner(...);
    }

}

scan
变量必须是全局的、静态的,因为您的方法是静态的。如果您想从另一个方法,甚至是另一个类访问它,则必须全局声明它

import java.util.*;
import java.io.*;

public class VerticalPercolation {

    private static Scanner scanner;

    public static boolean[][] flow (final boolean[][] open) {
        // ...
    }

    public static boolean percolates (final boolean[][] open) {
        // ...
    }

    public static boolean[][] random (final int n, final double p, final Random rnd) {
        // ...
    }

    public static boolean readBoolean () {
        // ...
    }

    public static boolean[][] readBoolean2D () {
        // ...
    }

    public static void print (final boolean[][] a) {
        // ...
    }

    public static void main (final String[] args) {
        scanner = new Scanner(...);
    }

}
希望有帮助


希望这有帮助

其他答案建议创建静态或全局-忽略它们

您在一个不使用它的函数中创建扫描仪扫描,不要在那里创建它,在需要的地方创建它

readBoolean2D和readBoolean都需要将扫描仪作为参数:

public static boolean[][] readBoolean2D (Scanner scan) {
main是您需要创建和使用扫描仪的地方:

public static void main (final String[] args) throws IOException {
    final File f = new File("file.txt");
    Scanner scan = new Scanner(f);
    try {
        final boolean[][] open = readBoolean2D (scan);
        print (flow (open));
        System.out.println (percolates (open));
    } finally {
        scan.close();
    }
}

其他答案建议创建一个静态或全局-忽略它们

您在一个不使用它的函数中创建扫描仪扫描,不要在那里创建它,在需要的地方创建它

readBoolean2D和readBoolean都需要将扫描仪作为参数:

public static boolean[][] readBoolean2D (Scanner scan) {
main是您需要创建和使用扫描仪的地方:

public static void main (final String[] args) throws IOException {
    final File f = new File("file.txt");
    Scanner scan = new Scanner(f);
    try {
        final boolean[][] open = readBoolean2D (scan);
        print (flow (open));
        System.out.println (percolates (open));
    } finally {
        scan.close();
    }
}

将其设置为类文件
专用扫描程序scan=null刚刚尝试过,Try{}中的“scan”给了我错误“无法从静态上下文引用非静态变量扫描”。:/也张贴在这里:这确实解决了这个错误,非常感谢!优点:当我运行程序时,readBoolean2D方法下的int m和int m会给我空指针异常。有什么想法吗?@user979501:是的-您只是在尝试读取扫描仪后才创建它。扫描器不是中微子——它们不能在时间上倒转:)看我的答案。把它作为一个类文件
private Scanner scan=null刚刚尝试过,Try{}中的“scan”给了我错误“无法从静态上下文引用非静态变量扫描”。:/也张贴在这里:这确实解决了这个错误,非常感谢!优点:当我运行程序时,readBoolean2D方法下的int m和int m会给我空指针异常。有什么想法吗?@user979501:是的-您只是在尝试读取扫描仪后才创建它。扫描器