在eclipse java

时间:2016-10-22 06:06:24

标签: java exception-handling static filenotfoundexception

所以基本上我需要代码才能访问pin变量。但是当我使pin静态时,Eclipse告诉我在静态之前制作所有变量。所以我做到了。但是只要我file静态,Scanner(textFile)就会出错:

  

未处理的异常类型FileNotFoundException

导致此问题的原因是什么?我需要变量是静态的。也许如果有一种方法可以使非静态变量等于静态变量。

import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;

public class atmtester {
    atmtester() throws FileNotFoundException{}
    static Scanner keyboard = new Scanner(System.in);
    private static float balance = 500;

    static String pinfile = "/Users/Pallav/Documents/Work/Computer Science/pin.txt";
    static File textFile = new File(pinfile);
    static Scanner fromfile = new Scanner(textFile); 
    static String pin = fromfile.nextLine();

我只需要帮助以上的东西。下面的代码只是针对我为什么需要静态的上下文。

public static void main(String[] args) throws InterruptedException {        
    System.out.print("Please enter your PIN: ");
    for (int i = 1; i < 4; i++) {
        String theirpin = keyboard.next();
        if (theirpin.equals(pin)) {
            System.out.println("Correct PIN entered. Now taking you to menu...");
            break;
        } else if (!theirpin.equals(pin)) {
            int triesremaining = 0;
            triesremaining = 3 - i;
            System.out.println("*Incorrect PIN. You have " + triesremaining + " tries remaining*");
            if (triesremaining != 0)
                System.out.print("Enter the correct PIN: ");
            else if (i == 3) {
                System.err.println("\n*Card Blocked!*");
                System.exit(0);
            }
        }
    }

static void checkPin(String tocheckpin) {
    if (!tocheckpin.equals(pin)) {
        System.out.print("Incorrect Pin. You have 1 more try. Try again: ");
        tocheckpin = keyboard.next();
        if (!tocheckpin.equals(pin)) {
            System.err.println("*Card Blocked!*");
            System.exit(0);
        }
    } else if (tocheckpin.equals(pin)) {
    }
}

2 个答案:

答案 0 :(得分:0)

你应该这样做:static Scanner fromfile = new Scanner(textFile);在一个函数下,可以是main方法或任何其他方法,因为它会有一个

  

未处理的异常:FileNotFoundException

将Scanner语句包含在方法中时,可以在try catch块下使用它,也可以在方法本身中抛出异常,例如

a() throws FileNotFoundException{}

并回答为什么要求你将pin转换为静态是:

  1. main方法是静态的,您可以通过创建类的对象或将引脚声明为静态来访问引脚。因此,它要求您将其更改为静态
  2. 声明引脚后,它会要求您将所有其他变量转换为静态,因为您正在使用它 - &gt;来自引脚的文件,即pin = fromfile.nextLine();,因此您只需将静态内容分配给另一个静态变量 - &gt;现在textFile正在使用textFile ..所以textFile应该是静态的 - &GT;现在pinfile被绑定到textfile ..所以pinfile应该改为static。
  3. 您应该明白,静态变量属于类本身而不属于类实例

答案 1 :(得分:0)

  

我不知道为什么。

编译错误的原因是new Scanner(String)可以抛出FileNotFoundException。这是已检查的异常,这意味着必须被捕获...或传播。

问题是无法捕获类字段的初始值设定项引发的异常。

有两种方法可以解决这个问题:

  1. 您可以在静态初始化程序块中进行初始化; e.g。

    static File textFile = new File(pinfile);
    static Scanner fromfile;
    static String pin;
    static {
        try {
            fromFile = new Scanner(textFile); 
            pin = fromfile.nextLine();
        } catch (Exception ex) {
            pin = 0;
        }
    }
    
  2. 更好的方法是将初始化(和异常处理)放入静态方法:

    static String pin = readPinFromFile(pinFile);
    
    public static String readPinFromFile(String fileName) {
        // ... open file, read and close, handling exceptions
    }