所以基本上我需要代码才能访问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)) {
}
}
答案 0 :(得分:0)
你应该这样做:static Scanner fromfile = new Scanner(textFile);
在一个函数下,可以是main方法或任何其他方法,因为它会有一个
未处理的异常:FileNotFoundException
将Scanner语句包含在方法中时,可以在try catch块下使用它,也可以在方法本身中抛出异常,例如
a() throws FileNotFoundException{}
并回答为什么要求你将pin转换为静态是:
pin = fromfile.nextLine();
,因此您只需将静态内容分配给另一个静态变量
- &gt;现在textFile正在使用textFile ..所以textFile应该是静态的
- &GT;现在pinfile被绑定到textfile ..所以pinfile应该改为static。您应该明白,静态变量属于类本身而不属于类实例
答案 1 :(得分:0)
我不知道为什么。
编译错误的原因是new Scanner(String)
可以抛出FileNotFoundException
。这是已检查的异常,这意味着必须被捕获...或传播。
问题是无法捕获类字段的初始值设定项引发的异常。
有两种方法可以解决这个问题:
您可以在静态初始化程序块中进行初始化; 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;
}
}
更好的方法是将初始化(和异常处理)放入静态方法:
static String pin = readPinFromFile(pinFile);
public static String readPinFromFile(String fileName) {
// ... open file, read and close, handling exceptions
}