2012-12-19 13 views
14

तो यह एक अजीब एक है, मैं कोड में ही पता है की घोषणा काफी बेकार है, लेकिन क्यों मैं त्रुटि मिलती है कि मैं क्या सोच रहा हूँ:एक बेकार स्थानीय चर

मैं कुछ कोड लिख रहा था, मैं इस लिखा था :

if(scan.hasNextInt()) 
    int row = scan.nextInt(); 

समय में चर गुंजाइश के बारे में सोच नहीं था, स्पष्ट रूप से यह बेकार है क्योंकि मैं row अतीत if वैसे भी उपयोग नहीं कर सकते। अब

> javac hw.java 
hw.java:25: '.class' expected 
    int row = scan.nextInt(); 
     ^
hw.java:25: not a statement 
    int row = scan.nextInt(); 
    ^ 
hw.java:25: illegal start of expression 
    int row = scan.nextInt(); 
      ^
hw.java:25: ';' expected 
    int row = scan.nextInt(); 
       ^

अगर मैं संशोधित है कि अगर जांच करने के लिए:

if(scan.hasNextInt()) { 
    int row = scan.nextInt(); 
} 

यह ठीक संकलन होगा क्या मैं नहीं मिलता है कारण है कि मैं त्रुटि मैंने किया था मिल गया है। मैं इस धारणा के तहत था कि अगर if के तहत 1 पंक्ति थी तो घुंघराले ब्रैकेट वैकल्पिक थे ... स्पष्ट रूप से अन्य विचार भी हैं या दोनों संकलित या असफल होंगे।

क्या कोई मुझे समझा सकता है, या मुझे एक दस्तावेज़ में इंगित कर सकता है जो बताता है कि मैं घुमावदार ब्रैकेट के बिना if सशर्त के तहत स्थानीय चर घोषित क्यों नहीं कर सकता?


संपादित करें: यहाँ पूर्ण समारोह है:

public static char getinput() { 
    System.out.println("Where do you want to go? (row column)"); 
    Scanner scan = new Scanner(System.in); 
    if(scan.hasNextInt()) 
     int row = scan.nextInt(); 
    String input = scan.next(); 
    System.out.println(input); 
    return 'a';  
} 
+7

पहले और बाद में क्या आता है मान वह 'अगर'? –

+1

कृपया अपना पूरा कोड यहां लिखें –

+0

@NikolayKuznetsov - संपादित करें देखें। – Mike

उत्तर

25

यदि आपके पास एक if, for, while, do/while आप इसे एक बयान के साथ पालन करना चाहिए। एक घोषणा एक बयान नहीं है।

JLS 14.9 - The if Statement

IfThenStatement: 
    if (Expression) Statement 

IfThenElseStatement: 
    if (Expression) StatementNoShortIf else Statement 

IfThenElseStatementNoShortIf: 
    if (Expression) StatementNoShortIf else StatementNoShortIf 

से मैं वे ऐसा करते हैं क्योंकि कोई भी चर आप यह घोषणा करते इस्तेमाल किया नहीं किया जा सका, क्योंकि यह क्षेत्र से बाहर तुरंत किया जाएगा (एक ही घोषणा को छोड़कर)

+0

वहां है। आपका बहुत बहुत धन्यवाद! – Mike

+1

@ पीटर लेवरी मैं 100% निश्चित नहीं हूं, लेकिन [जेएलएस 14.4] से यह वाक्य (http://docs.oracle.com/javase/specs/jls/se7/html/jls-14.html#jls-14.4) अधिक प्रासंगिक हो सकता है - "प्रत्येक स्थानीय परिवर्तनीय घोषणा कथन _Mmedimedi एक ब्लॉक_ द्वारा निहित है।" (जोर जोड़ा गया) –

+0

'if' को' while' में बदलकर एक ही त्रुटि में परिणाम, इसलिए वास्तव में मुझे पूरा यकीन है कि नियम प्रभावी है –

1

मेरा अनुमान है कि एक घोषणा एक निष्पादन योग्य बयान और एक काम वास्तव में से दो अलग-अलग बयानों में बाँटा गया है के साथ एक घोषणा नहीं है कंपाइलर, पहले कथन (घोषित) के साथ निष्पादन योग्य नहीं है। यदि एक निष्पादन योग्य निर्माण की आवश्यकता है, या तो एक ब्लॉक या निष्पादन योग्य कथन।

मुझे पता है कि मैं एक्लिप्स डीबगर में एक गैर-संरेखण घोषणा विवरण पर ब्रेकपॉइंट नहीं डाल पाया। शायद एक ही अंतर्निहित कारण।

संबंधित मुद्दे