2016-11-07 3 views
0

Ich versuche, ein Programm zu machen, das die Zeichenfolge s1 abhängig von der Stundenvariable einem bestimmten Text gleich macht. Das Problem ist, wenn ich das Programm s1 nicht gefunden habe. Ich fange gerade mit Java an, also bin ich nicht sicher, ob das wirklich ineffizient ist oder wenn es etwas einfaches ist, das ich vermisse.Variable wird nicht von if-Anweisungen definiert

Code:

public class Main { 

    public static void main(String[] args) { 
     // String Change Test 
     int[] arr; 
     arr = new int[2]; 
     arr[0] = 1; 
     boolean b1 = arr[0] > 1; 
     boolean b2 = arr[0] < 1; 
     boolean b4 = 0 > arr[0]; 
     boolean b3 = b4 && b2; 
     boolean b5 = b1 || b3; 
     if (b5) { 
      String s1 = "You have played for " + arr[0] + " hours!"; 

     } 
     else if (arr[0] == 1) { 
      String s1 = "You have played for 1 hour!"; 

     } 
     else if (arr[0] == 5) { 
      String s1 = "You have not played at all!"; 
     } 
     else { 
      String s1 = "Memory Error in arr[0], Are the hours negative? Is it there?"; 
     } 
     System.out.print (s1); 
    } 
} 
+4

Sie müssen s1 außerhalb des Rahmens der Bedingungen erklären. –

+0

Bitte deklarieren Sie die Variable außerhalb der ersten if-Anweisung und verwenden Sie dieselbe Variable überall. Bitte lesen und verstehen Sie den Umfang der Variablen. –

Antwort

2

Der Umfang einer Variablen ist der Block, in dem die Variable deklariert ist. Blöcke beginnen an der öffnenden geschweiften Klammer und enden an der passenden schließenden geschweiften Klammer. Sie deklarieren also drei verschiedene Variablen, die außerhalb ihres Blocks nicht sichtbar sind (weshalb Sie Java übrigens auch dreimal mit demselben Namen deklarieren können).

Deklarieren Sie die Variable einmal außerhalb der Blöcke:

String s1; 
if (b5) { 
    s1 = "You have played for " + arr[0] + " hours!"; 
} 
... 
0

Sie String s1 am Anfang Ihrer Hauptmethode definieren müssen, wie zum Beispiel:

 String s1; 

Später, wenn Sie set s1 (in Ihrem if, else-Anweisungen), können Sie schreiben:

 s1 = "You have played for......"; 

auf diese Weise wird s1 wurde erklärt ein t der Anfang des Codes.

+0

Saying String s1 muss am Anfang Ihrer Hauptmethode deklariert werden, während es funktionieren würde, könnte den falschen Eindruck vermitteln. –

+0

Ja, stimmt. Ich hätte auch etwas über den Umfang erwähnen sollen. Vielen Dank. – Abdulgood89

0

Was in einem Codeblock passiert, bleibt in diesem Codeblock. Wenn Sie eine Variable in einem if block deklarieren, ist es außerhalb der if block - nicht einmal in else if und else Fällen nicht sichtbar. Ihr Code sollte nicht kompiliert werden, da die letzte s1 nicht zuvor deklariert wurde.

String s1; 
    if (b5) { 
     s1 = "You have played for " + arr[0] + " hours!"; 

    } 
    else if (arr[0] == 1) { 
     s1 = "You have played for 1 hour!"; 

    } 
    else if (arr[0] == 5) { 
     s1 = "You have not played at all!"; 
    } 
    else { 
     s1 = "Memory Error in arr[0], Are the hours negative? Is it there?"; 
    } 
    System.out.print(s1); 

Dies sollte ordnungsgemäß funktionieren.

2

die Sie interessieren ..

int[] arr; 
arr = new int[2]; 
arr[0] = 1; 
boolean b1 = arr[0] > 1; 
boolean b2 = arr[0] < 1; 
boolean b4 = 0 > arr[0]; 
boolean b3 = b4 && b2; 
boolean b5 = b1 || b3; 
String s1 = ""; 
if (b5) { 
    s1 = "You have played for " + arr[0] + " hours!"; 

} 
else if (arr[0] == 1) { 
    s1 = "You have played for 1 hour!"; 

} 
else if (arr[0] == 5) { 
    s1 = "You have not played at all!"; 
} 
else { 
    s1 = "Memory Error in arr[0], Are the hours negative? Is it there?"; 
} 
System.out.print (s1); 
} 
Verwandte Themen