2016-05-02 3 views
0

К сожалению, я являюсь новичком в кодировании с помощью java. Мой вопрос теперь в том, почему переменные runde, punkte в методе starteRunde() не определены. Но на самом деле я определил их в методе выше, не так ли? Почему я не могу использовать эти переменные в следующих методах?Переменные между методами

public class GameActivity extends Activity implements View.OnClickListener{ 

    private void spielStarten(){ 
     boolean spielLaeuft = true; 
     int runde = 0; 
     int punkte; 
     punkte = 0; 
     starteRunde(); 
    } 

    private void starteRunde(){ 
     runde = runde + 1; 
     int muecken = runde * 10; 
     int gefangeneMuecken = 0; 
     int zeit = 60; 
     bildschirmAktualisieren(); 
} 

...

+0

читать эту https://docs.oracle.com/javase/tutorial/java/nutsandbolts/variables.html – Raghunandan

+0

Эти переменные существуют только в пределах, где они были определены , который находился внутри метода spielStarten. Если вам нужен доступ к этим переменным в других методах, вам нужно либо передать эти переменные этим методам, либо предоставить эти переменные класса. – ManoDestra

ответ

1

Потому что они не являются глобальными. для использования этих переменных во всех методах, пожалуйста, определите их на уровне класса.

public class GameActivity extends Activity implements View.OnClickListener{ 

     boolean spielLaeuft = true; 
     int runde = 0; 
     int punkte; 

    private void spielStarten(){  
     punkte = 0; 
     starteRunde(); 
    } 

    private void starteRunde(){ 
     runde = runde + 1; 
     int muecken = runde * 10; 
     int gefangeneMuecken = 0; 
     int zeit = 60; 
     bildschirmAktualisieren(); 
} 
0

переменные имеют объем, который, проще говоря, блок кода, который они определены. Так как вы определили эти переменные в методе, другие методы не могут получить доступ к ним, потому что они за пределами scope этого метода.

В этом случае, вы могли бы рассмотреть вопрос о перемещении переменных на уровне класса:

public class GameActivity extends Activity implements View.OnClickListener{ 
boolean spielLaeuft; 
int runde; 
int punkte; 
int muecken; 
int gefangeneMuecken; 
int zeit; 

private void spielStarten(){ 
    spielLaeuft = true; 
    runde = 0; 
    punkte = 0; 
    starteRunde(); 
} 

private void starteRunde(){ 
    runde = runde + 1; 
    muecken = runde * 10; 
    gefangeneMuecken = 0; 
    zeit = 60; 
    bildschirmAktualisieren(); 
} 
} 

У вас также есть возможность передачи переменных по методам, как параметров, поэтому, вместо того чтобы определять следующие переменные в на уровень класса, вы можете также код starteRunde как это, если он работает лучше для вашего следующего вызова метода:

private void starteRunde(){ 
    int runde = runde + 1; 
    int muecken = runde * 10; 
    int gefangeneMuecken = 0; 
    int zeit = 60; 
    bildschirmAktualisieren(runde, meucken, gefangeneMuecken, zeit); 
} 

Я рекомендую вам сделать некоторые исследования по области видимости переменной, так что вы можете лучше понимать это. Примеры здесь не полностью объясняют концепцию.

0

Java имеет 4 различного типа переменных
• переменный класс
• Переменный экземпляр
• Локальные переменные
• переменных параметры

Каждые переменные имеют 2 свойство:
• время жизни = длительность, что существует переменная
• scope = область в программе, в которой доступна переменная (может использоваться)

This Article объяснить вам более подробную информацию о видимости переменных в Java

Смежные вопросы