到目前为止我有这个,结果是一个空白屏幕。我可以做些什么来达到列出前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)+", "));
}
}
答案 0 :(得分:1)
首先,仅创建TextView
并不会使其成为正在显示的视图层次结构的一部分。其次,Android永远不会调用您的main
方法。第三,我看不到你的代码是如何编写的; main
中的循环仅涵盖fibNum
的分配,因此在调用setText
时,变量i
甚至不在范围内。
将所有这些放在一边,让我们假设您的activity_main.xml
布局文件中已经有一个TextView
,其中包含您要显示数字的标识@+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
)。