Frage von Sapzalp95, 47

Java: Warum kann ich meine Variable außerhalb der IF nicht println?

Guten Abend, ich schreibe gerade aus Lust und Laune an einem Java Programm.

nun habe ich mir die Codezeile (BufferedReader.... und String Name......) aus dem Netz kopiert um einen Namen (String) einzulesen.

Am Ende der If gebe ich den Namen aus (println(name1);) -> Es klappt

2 Zeilen Später (außerhalb der If) heißt es "name1 cannot be resolved to a variable"

Warum ist das so? Sollte es nicht eigentlich eine Variable bleiben, warum klappt es nur in der If?

package freierTest;

import java.io.*;
import static gdi.MakeItSimple.*;

public class Test {

public static void main(String[] args) throws IOException {

    int personenZahl = readInt();

    if (personenZahl >= 1) {
        BufferedReader name1 = new BufferedReader(new InputStreamReader(System.in));
    String namePerson1 = name1.readLine();
    int wettePerson1 = readInt();
    println(name1);
    }
println(name1);
}}

Ich schreibe meinen Code in Eclipse Mars

Antwort
von kolmappierkolle, 37

Du legst die lokale Variable "name1" erst in der if-Abfrage fest. Wenn du danach versuchst darauf zuzugreifen, geht das logischerweise nicht.

Kommentar von Sapzalp95 ,

Kann die die Variable vorher festlegen und in der if-Abfrage benennen.

Sprich den abgefragten namen zuweisen?

Kommentar von kolmappierkolle ,

Ja, das ist möglich, sofern die Variable nicht final ist. Sprich:

BufferedReader name1;
if (personenZahl >= 1) {
name1 = new BufferedReader(new InputStreamReader(System.in));
String namePerson1 = name1.readLine();
int wettePerson1 = readInt();
}
System.out.println(name1);
Kommentar von Sapzalp95 ,

Vielen Dank, mein Problem ist damit gelöst, und das Programm läuft so wie ich es möchte.

Antwort
von TUrabbIT, 7

In objektorientierten Sprachen wie Java sind Variablen nur in dem Block und Unterblöcken bekannt in denen sie deklariert werden.
Dein name1 ist somit nur in dem if bekannt.
Wenn du es danach noch brauchst, solltest du die Variable vor dem if deklarieren und in den if nur den Wert verändern.

Kommentar von Isendrak ,

Nicht nur in Objektorientierten Sprachen... Auch in C/C++, Python, usw...

P.S.: Ja, C++ und Python haben auch Objekt-/Modulunterstützung, sind aber nicht von Grund auf Objektorientiert...

Kommentar von TUrabbIT ,

Danke für die Ergänzung.

Ich war mir da nicht ganz sicher, deshalb habe ich mich auf die beschränkt wo ich sicher bin.

Antwort
von DougundPizza, 21

Leg dein Name1 über dem if an, ansonsten zählt für lokale Variable nur darin.

Antwort
von SergeantPinpack, 28

Der zweite Aufruf erfolgt außerhalb des Scopes, in dem die Variable "name1" deklariert wurde.

Antwort
von Schachpapa, 13

Guck mal genau hin.

Willst du wirklich name1 ausgeben? Das ist der Name deines InputStreams. Ein schlecht gewählter Name würde ich sagen. Nenne ihn lieber input1, dann wird dein Programm auch gleich leserlicher.

Du willst namePerson1 ausgeben. Diese Vriable solltest du außerhalb des if-Blocks deklarieren.

Keine passende Antwort gefunden?

Fragen Sie die Community