2013-02-18 5 views
-2

Я пытаюсь инициализировать переменную дважды в 2 различных функциях без второй инициализации, оказывающей влияние на первую.Как инициализировать переменную дважды?

float X; 

void setup() 
{ 
    size(400, 400); 
    background(255); 
} 
void draw() 
{ 
    Rect1(); 
    Rect2(); 
} 

void Rect1() 
{ 
    fill(255,0, 0); 
    rect(X, 20, 40, 40); 
    X=20; 
} 

void Rect2() 
{ 
    fill(0, 255, 0); 
    rect(X, 200, 40, 40); 
    X=50; 
} 
+1

Пожалуйста, объясните более подробно, чего вы хотите достичь, поскольку в настоящее время самым простым ответом будет «использовать 2 переменные» или «объявить их внутри функции», но это, соответственно, сделает невозможным взаимодействие и сделать их невидимыми вне их функции. – fvu

+3

Это выглядит как [проблема XY] (http://meta.stackexchange.com/questions/66377/what-is-the-xy-problem) – Alnitak

+0

Непонятно, чего вы пытаетесь достичь здесь. Вы объявили «X» глобальной переменной. Но вы, вероятно, хотите сделать это локальной переменной, объявленной в верхней части Rect1() и Rect2(), или вам может понадобиться передать ссылку или указатель на переменную в каждую функцию, а затем вызывающий (draw()) могут использовать разные переменные для вызовов Rect1() и Rect2(). – Ant

ответ

1

Вы код, кажется, «демонстрация» код, но он не делает ничего существенного, кроме показывают, что вы, вероятно, нужны сначала сесть и узнать немного о обработке, прежде чем продолжить - ударяет обработку .org и пропустите некоторые из учебников. Это стоит того.

Код, который вы указали, может быть написан гораздо более разумно, но вместо этого я отвечу на вопрос; Обработка использует вариацию области видимости Явы: локальная переменная козыри переменной экземпляра объекта, который козыри глобальную переменную:

int x = 0; 
int y = 50; 

class Thing { 
    int y = 10;  
    Thing() { 
    // x is global, y is global and object instance 
    println("x (in Thing): "+x); 
    println("y (in Thing): "+y); 
    declareAndCheck(); 
    } 
    void declareAndCheck() { 
    // now we make some local variables: they win. 
    int x = 40; 
    int y = 100; 
    println("x (local declared): "+x); 
    println("y (local declared): "+y); 
    } 
} 

void setup() { 
    println("x (global): "+x); 
    println("y (global): "+y); 
    Thing t = new Thing(); 
    // and global is still global 
    println("x (global, again): "+x); 
    println("y (global, again): "+y); 
} 

Это будет генерировать следующий вывод:

x (global): 0 
y (global): 50 
x (in Thing): 0 
y (in Thing): 10 
x (local declared): 40 
y (local declared): 100 
x (global, again): 0 
y (global, again): 50 

Почему? Сначала мы видим следующее:

x (global): 0 
y (global): 50 

потому что x и y являются глобальными переменными со значениями 0 и 50. Достаточно просто. то мы видим:

x (in Thing): 0 
y (in Thing): 10 

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

Тогда мы входим declareAndCheck, где мы видим:

x (local declared): 40 
y (local declared): 100 

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

Наконец мы снова напечатать х и у в глобальном контексте, и потому, что нет никакого конфликта, мы видим:

x (global, again): 0 
y (global, again): 50 

И если это не имеет смысла для вас, проходят через эти учебники, они учат вас программирование в обработке =)

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