2016-10-05 5 views
0

myScannerを閉じると、到達不能なコードであることを伝えるmyScanner.closeの下に赤い線が表示されます。私は間違って何をしていますか?javaでスキャナを閉じるときに到達できないコードはありますか?

public class crypt {  

static final char FIRST = ' '; 
static final char LAST = ']'; 

static final int RANGE = LAST-FIRST+1; 

public static void main(String[] args) { 
    safe(""); 

} 

public static boolean safe(String word) { 
    Scanner myScanner = new Scanner(System.in); 
    word = myScanner.nextLine(); 
    String upper = word.toUpperCase(); 
     for (int i=0; i<upper.length(); i++) { 
      char c = upper.charAt(i); 
       if (c < FIRST && c > LAST) { 
        return true; 
       } 
     } 
    return false; 
    myScanner.close(); 
} 
+0

'' 'myScanner.close();' ''の上にある行を見ましたか? – kkaosninja

+1

あなたが決してそれに達することはないので、その行は本当に到達不能です。関数から最初に 'return'してください。 –

+0

'Scanner.close()'はもう本当に使う必要はありませんか? – RobotKarel314

答えて

0

myScanner.close();を「return false;」の前の行に移動したいと思うでしょう。注意すべきもう一つのことは、あなたが真を返すときにスキャナを閉じることではないということです。 return true;の前にmyScanner.close();を追加することができます。

public static boolean safeToUse(String plaintext) { 
    Scanner myScanner = new Scanner(System.in); 
    plaintext = myScanner.nextLine(); 
    String upper = plaintext.toUpperCase(); 
     for (int i=0; i<upper.length(); i++) { 
      char c = upper.charAt(i); 
       if (c < FIRST && c > LAST) { 
        myScanner.close(); //Close the scanner before you return true 
        return true; 
       } 
     } 
    myScanner.close(); //close the scanner before you return. 
    return false; 
} 

関数内にある場合、コードはreturnの後に実行されません。 returnをコード内の停止点としてマークします。この点に達すると、そのメソッド/関数(あなたのケースではsafeToUse()が呼び出された場所に移動します)。

コードの実行を追跡し、プログラムの実行をよりよく理解するには良い方法ですが、コンパイルするには最初に提案された変更を行う必要があります。

0

このライン:

return false; 

結果を返すように停止機能 "" ので、この文の後のコードは実行されません。

また、あなたはそれを使用した後、お使いのスキャナを閉じる必要があり、その前にまず

myScanner.close(); 

文を動かす「return false;」を、また、前にそれを追加し、「trueを返します。」ステートメント。

0

return文が呼び出されると、次の行は実行されず、コンパイルエラーが発生します。

関連する問題