Android Coin-Toss Симулятор Отстающий - PullRequest
1 голос
/ 06 марта 2012

Хорошо, я новичок в программировании Android, но я создал приложение следующим образом.

package com.michaelpeerman.probability;

import android.app.Activity;
import android.os.Bundle;
import android.text.Editable;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import java.util.Random;

public class ProbabilityActivity extends Activity
{
  private EditText number;
  private Button submit;

  public void flipcoin(int numberint)
  {
    TextView result = (TextView)findViewById(R.id.result);
    int heads = 0;
    int tails = 0;
    for (int j = 0; j < numberint; j++)
    {
      int i = 1 + new Random().nextInt(2);
      if (i == 1)
        heads++;
      if (i == 2)
        tails++;
      result.setText("heads : " + heads + "\ntails : " + tails);
    }
  }

  public void onCreate(Bundle paramBundle)
  {
    super.onCreate(paramBundle);
    setContentView(R.layout.main);
    submit = ((Button)findViewById(R.id.submit));
    submit.setOnClickListener(new View.OnClickListener()
    {
      public void onClick(View paramView)
      {
        number = ((EditText)findViewById(R.id.number));
        int numberint = Integer.parseInt(number.getText().toString());
        flipcoin(numberint);
      }
    });
  }
}

Но это работает невероятно медленно по сравнению с

package com.michaelpeerman.probability;

import android.app.Activity;
import android.os.Bundle;
import android.text.Editable;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import java.util.Random;

public class ProbabilityActivity extends Activity
{


  public void onCreate(Bundle paramBundle)
  {
    super.onCreate(paramBundle);
    setContentView(R.layout.main);


        TextView result = (TextView)findViewById(R.id.result);
        int heads = 0;
        int tails = 0;
        for (int j = 0; j < 50000; j++)
        {
          int i = 1 + new Random().nextInt(2);
          if (i == 1)
            heads++;
          if (i == 2)
            tails++;
          result.setText("heads : " + heads + "\ntails : " + tails);

  }
}

Я не понимаю, почему это так. Они оба используют один и тот же код, за исключением того, что первый позволяет ввести число и нажать «Отправить» перед запуском цикла. Разве они не должны быть одинаковой скоростью? Что я могу сделать, чтобы ускорить его?

1 Ответ

0 голосов
/ 06 марта 2012

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...