2015-03-10 6 views
-1

Я хочу, чтобы время начинало рассчитывать на первый щелчок на кнопке. при последнем клике он должен дать мне время между первым и последним кликами. В моем коде сказано: startTime cannot be resolved to a variable, когда я хочу получить difference.Время измерения в операторе if

вот код.

@Override 
    public void onClick(View v) { 
     textview1 = (TextView) findViewById(R.id.textView1); 
    //Button b = (Button) findViewById(R.id.start_time); 
     Random r = new Random(); 
     RelativeLayout decorView = (RelativeLayout) start_time.getParent(); 
     int screenWidth = decorView.getWidth(); 
     int screenHeight = decorView.getHeight(); 

     i++; 

     /* 
     Random r = new Random(); 

     int x = r.nextInt(R.id.wrap_content); 
     int y = r.nextInt(R.id.wrap_content); 

     b.setX(x); 
     b.setY(y); 
     */ 

     if (i == 1) { 
      long startTime = SystemClock.elapsedRealtime(); 
      start_time.setX(r.nextInt(screenWidth - start_time.getWidth())); 
      start_time.setY(r.nextInt(screenHeight - start_time.getHeight())); 
     } 
     if (i == 2) { 
      start_time.setX(r.nextInt(screenWidth - start_time.getWidth())); 
      start_time.setY(r.nextInt(screenHeight - start_time.getHeight())); 
     } 
     if (i == 3) { 
      start_time.setX(r.nextInt(screenWidth - start_time.getWidth())); 
      start_time.setY(r.nextInt(screenHeight - start_time.getHeight())); 
     } 
     if (i == 4) { 
      start_time.setX(r.nextInt(screenWidth - start_time.getWidth())); 
      start_time.setY(r.nextInt(screenHeight - start_time.getHeight())); 
     } 
     if (i == 5) { 
      start_time.setX(r.nextInt(screenWidth - start_time.getWidth())); 
      start_time.setY(r.nextInt(screenHeight - start_time.getHeight())); 
     } 
     if (i == 6) { 
      start_time.setX(r.nextInt(screenWidth - start_time.getWidth())); 
      start_time.setY(r.nextInt(screenHeight - start_time.getHeight())); 
     } 
     else if (i == 7) { 
    long difference = SystemClock.elapsedRealtime() - startTime; 

     // here it says startTime cannot be resolved to a variable 

     Intent intent1 = new Intent(Game.this, MainScreen.class); 
     intent1.putExtra("time",difference); 
      finish(); 
     } 

    } 

ответ

1

Изменить код из

if (i == 1) { 
    long startTime = SystemClock.elapsedRealtime(); 
    ... 

в

long startTime; 
if (i == 1) { 
    startTime = SystemClock.elapsedRealtime(); 
    ... 

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

Edit:

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

else if (i == 7) { 
    long difference = SystemClock.elapsedRealtime() - startTime; 

    Intent intent1 = new Intent(Game.this, MainScreen.class); 
    intent1.putExtra("time",difference); 

    finish(); 
} 
+0

Теперь я не получаю результат, я имею в виду, строка 'intent1.putExtra (» время ", разность);' где время должно быть пустым –

+0

@ Emanuel Graf Я отредактировал свой ответ, надеюсь, что понял вашу проблему – antonio

+0

спасибо. да, я изменил его, но я все еще не получаю время .. :( –

1

Вы startTime объявлены в первом if заявлении

if (i == 1) { 
    long startTime = SystemClock.elapsedRealtime(); 

поэтому вне этого вне этого. Объявите это раньше, как в начале onClick()

public void onClick(View v) { 

textview1 = (TextView) findViewById(R.id.textView1); 
//... 
//Somewhere here 
long startTime; 

затем просто инициализировать его в вашем if

if (i == 1) { 
    startTime = SystemClock.elapsedRealtime(); 
+0

говорит: 'Локальная переменная startTime может быть не инициализирована', quickfix -' long startTime = 0; ', но это не работает –

+0

Если я инициализирую 'long startTime = 0;', то я не получаю результата. –

+0

Ах, да, он будет повторно инициализирован до 0 каждый раз. Сделайте его переменной-членом (вне метода) – codeMagic

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