2016-10-22 4 views
-1

그래서 기본적으로 pin 변수에 액세스 할 코드가 필요합니다. 그러나 pin을 정적으로 만들면 이클립스에서 모든 변수를 정적으로 만들기도합니다. 그래서 그렇게했습니다. 이 문제의 원인은 무엇이클립스 자바 스캐너 함수에서 정적 변수를 만드는 동안 오류가 발생했습니다

Unhandled exception type FileNotFoundException

:하지만 최대한 빨리 정적 file 수 있도록 한, Scanner(textFile) 오류를 준다? 변수가 정적이어야합니다. 어쩌면 비 정적 변수를 정적 변수로 만드는 방법이 있다면.

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(); 

위 항목에 대한 도움이 필요합니다. 아래의 코드는 왜 정적이 필요한지에 대한 컨텍스트에 대한 것입니다. 당신이하는 방법, 다음 중 하나를 수행 할 수 있습니다 내부에서 스캐너 문을 묶으면 그것이

unhandled exception: FileNotFoundException

이 때문에 주요 방법이나 다른 방법이 될 수 있습니다, 함수에서 static Scanner fromfile = new Scanner(textFile); :

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

이 작업을 수행해야 그것은 자신과 같은

a() throws FileNotFoundException{}

그리고 답변을 왜 내가 방법의 시도의 catch 블록이나 던져 예외 아래 핀을 정적으로 변환하라는 메시지는 다음과 같습니다.

  1. main 메서드는 정적이며 클래스 개체를 만들거나 정적으로 선언하여 핀에 액세스 할 수 있습니다. 따라서 정적으로 변경해야합니다.
  2. 핀을 선언 한 후 인 -> fromfile을 사용하므로 다른 모든 변수를 정적으로 변환하라는 메시지가 표시되므로 정적 콘텐츠 만 다른 정적 변수 -> 지금 textFile이 formfile에 의해 사용되고 있습니다. 그래서 textFile은 static으로 만들어야합니다. -> 이제 pinfile이 textfile에 할당됩니다. 그래서 pinfile은 static으로 변경되어야합니다. 당신은 그것을 이해해야합니다

는 정적 변수는 클래스 인스턴스

0

And I don't know why.

컴파일 오류의 원인 new Scanner(String)FileNotFoundException를 던질 수 있다는 것이다 클래스 자체와하지에 속한다. 이것은 이며 예외는이며, 이는 이어야 함을 의미합니다.

문제는 클래스 필드의 초기화 프로그램에서 발생하는 예외는 캐치 될 수 없다는 것입니다. 이 문제를 해결하는 방법은 두 가지가 있습니다

:

  1. 당신은 정적 초기화 블록의 초기화를 할 수는; 예 :

    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 
    } 
    
관련 문제