0

到目前为止我有这个,结果是一个空白屏幕。我可以做些什么来达到列出前 46 个斐波那契数字的预期效果?

TextView fibNum;
static int i = 0;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
}
    public static int fib(int n) {
                int prev1=0, prev2=1;
                for( i=0; i<n; i++) {
                    int savePrev1 = prev1;
                    prev1 = prev2;
                    prev2 = savePrev1 + prev2;
                }
                return prev1;
    }
    public void main(String[] args) {
        for (int i=0; i<=46; i++)

        fibNum = new TextView(this);
        fibNum.setText(String.valueOf(fib(i)+", "));
    }
}
4

1 回答 1

2

首先,仅创建 aTextView并不会使其成为正在显示的视图层次结构的一部分。其次,Android 永远不会调用你的main方法。第三,我看不出你的代码是如何编译的;内部的循环main仅涵盖对 的赋值fibNum,因此在调用 时setText,变量i甚至不在范围内。

抛开所有这些,让我们假设您的activity_main.xml布局文件中已经有一个TextView带有 id@+id/text的您想要显示数字的位置。我建议这样的事情:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    TextView text = (TextView) findViewById(R.id.text);
    text.setText(getFib(46));
}

public static int fib(int n) {
    int prev1 = 0, prev2 = 1;
    for(int i = 0; i < n; i++) {
        int savePrev1 = prev1;
        prev1 = prev2;
        prev2 = savePrev1 + prev2;
    }
    return prev1;
}

public static String getFib(int n) {
    StringBuilder sb = new StringBuilder(fib(0));
    for (int i = 1; i < n; ++i) {
        sb.append(", ");
        sb.append(fib(i));
    }
    return sb.toString();
}

这假设计算 46 个斐波那契数不会花费过多的时间。如果是这样,您将不得不将计算移至工作线程(使用 可能最容易做到AsyncTask)。

于 2013-08-21T18:35:05.643 回答