15.3.6. FibActivity

优质
小牛编辑
133浏览
2023-12-01

15.3.6.FibActivity

FibActivity允许用户输入一个数字,分别运行四种算法计算这个值对应的菲波那契数,并将不同算法花费的时间输出,供我们比较。这个Activity需要调用到FibLib和linfib.so。

例 15.4. FibActivity.java

package com.marakana;

import android.app.Activity;

import android.os.Bundle;

import android.view.View;

import android.view.View.OnClickListener;

import android.widget.Button;

import android.widget.EditText;

import android.widget.TextView;

public class Fibonacci extends Activity implements OnClickListener {

TextView textResult;

Button buttonGo;

EditText editInput;

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.main);

// Find UI views

editInput = (EditText) findViewById(R.id.editInput);

textResult = (TextView) findViewById(R.id.textResult);

buttonGo = (Button) findViewById(R.id.buttonGo);

buttonGo.setOnClickListener(this);

}

public void onClick(View view) {

int input = Integer.parseInt(editInput.getText().toString()); //

long start, stop;

long result;

String out = "";

// Dalvik - Recursive

start = System.currentTimeMillis(); //

result = FibLib.fibJ(input); //

stop = System.currentTimeMillis(); //

out += String.format("Dalvik recur sive: %d (%d msec)", result, stop

- start);

// Dalvik - Iterative

start = System.currentTimeMillis();

result = FibLib.fibJI(input); //

stop = System.currentTimeMillis();

out += String.format("\nDalvik iterative: %d (%d msec)", result, stop

- start);

// Native - Recursive

start = System.currentTimeMillis();

result = FibLib.fibN(input); //

stop = System.currentTimeMillis();

out += String.format("\nNative recursive: %d (%d msec)", result, stop

- start);

// Native - Iterative

start = System.currentTimeMillis();

result = FibLib.fibNI(input); //

stop = System.currentTimeMillis();

out += String.format("\nNative iterative: %d (%d msec)", result, stop

- start);

textResult.setText(out); //

}

}

  1. 将字符串转换为数字。
  2. 在计算前,记录当前时间。
  3. 通过FibLib的方法计算菲波那契数,这里调用的是 Java 递归版本。
  4. 将当前时间减去先前记录的时间,即可得到算法花费的时间,以毫秒为单位。
  5. 使用 Java 的迭代算法执行计算。
  6. 使用本地的递归算法。
  7. 最后是本地的迭代算法。
  8. 格式化输出并且打印在屏幕上,