2014-01-24 2 views
0

Я смотрел онлайн-учебник java о циклах. Это создало цикл, который будет работать в течение одной минуты. В каждом цикле выполняется квадратный корень числа, затем это число увеличивается на единицу. Теоретически это будет служить для измерения скорости устройства, поскольку в соответствии с потенциалом устройства производится различное количество повторений цикла.Запуск петли в течение минуты - Android

Проблема в том, что я не могу сделать эту работу на Android. Это мой код:

package com.example.app; 

import android.support.v7.app.ActionBarActivity; 
import android.os.Bundle; 
import android.widget.TextView; 

import java.util.Calendar; 

public class MainActivity extends ActionBarActivity { 
    TextView tv1, tv2; 
    int index = 0; 
    int s, second, minute; 


    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.fragment_main); 
     tv1 = (TextView) findViewById(R.id.tv1); 
     tv2 = (TextView) findViewById(R.id.tv2); 

     //CURRENT TIME 
     Calendar c = Calendar.getInstance(); 
     minute = c.get(Calendar.MINUTE); 
     second = c.get(Calendar.SECOND); 

     //TIME AFTER 5 SECONDS 
     s = second + 5; 

     tv1.setText("Processing... Initial Time: " + minute + " minutes " + second + "seconds"); 

     while (true){ 
      double x = Math.sqrt(index); 
      index++ ; 
      // each loop will check the until 5 seconds elapsed 
      c = Calendar.getInstance(); 
      if (c.get(Calendar.SECOND) == s);{ 
       tv2.setText("\nDone! Final Time: " + c.get(Calendar.MINUTE) + " minutes " + c.get(Calendar.SECOND) + "seconds\n" + 
       index + " Loops in 5 seconds\n" + 
       "checking boolean... " +c.get(Calendar.SECOND) + " = " + s); 
       break; 
      } 
     } 
    } 
} 

И это результат: enter image description here

+0

Как в стороне, ваш цикл не остановится, если он начнется с секунд> = 55 (потому что вы будете проверять значение секунды> = 60). – NigelK

ответ

5

Попробуйте это:

if (c.get(Calendar.SECOND) == s){ 

Я удалил ";" символ

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

+1

Хороший улов, я не мог его увидеть! – Keerthivasan

1

Вы не должны кодировать такие циклы в onCreate, это блокирует поток пользовательского интерфейса, который будет завершен в ANR (приложение не отвечает).

Вы можете использовать CountDownTimer для таких целей, или Handler с postDelayed использовать

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