这是我的代码,它应该打印一个随机值(介于0和1之间),但它没有这样做!
我不知道如何解决它!我尝试了很多东西,但都没有成功!
以下是代码:
package com.example.lode.coder;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.TextView;
import android.widget.TextView;
import java.util.Random;
public class Coder extends AppCompatActivity {
TextView display;
String one;
boolean bl= true;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_coder);
display = (TextView) findViewById(R.id.text);
}
void all() {
while (bl) {
Random rand = new Random();
int n = rand.nextInt(2);
one = n + (String) display.getText();
display.setText(one);
}
}
}
答案 0 :(得分:2)
您没有显示调用all()
方法的位置。如果没有在任何地方调用它,那就可以解释为什么display
永远不会得到任何文本集。
但是假设它在某个地方被调用,那么仍然存在一个大问题:all()
方法是一个无限循环。在您将控制权返回到框架之前,您对display
所做的任何更改都不会显示在屏幕上。 (事实上,当应用程序注意到应用程序没有响应时,您的应用程序可能会被框架杀死。)
如果要连续更改文本,请使用Handler
。您可以创建一个Runnable
来执行实际更改,然后重新安排自己在短时间后再次运行。不要使用all()
中的当前循环。
这样的事情会起作用:
public class Coder extends AppCompatActivity {
private static long UPDATE_INTERVAL = 500; // every half second -- adjust as needed
TextView display;
String one;
Handler handler;
Runnable updater;
Random rand = new Random();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_coder);
display = (TextView) findViewById(R.id.text);
Handler handler = new Handler();
updater = new Runnable() {
@Override public void run() {
int n = rand.nextInt(2);
one = n + display.getText().toString();
display.setText(one);
handler.postDelayed(updater, UPDATE_INTERVAL);
}
}
}
@Override protected void onStart() { // or override onResume() instead
super.onStart();
startUpdates();
}
@Override protected void onStop() { // or override onPause() instead
super.onStop();
stopUpdates();
}
void startUpdates() {
handler.post(updater);
}
void stopUpdates() {
handler.removeCallbacks(updater);
}
}
答案 1 :(得分:1)
你没有在任何地方调用all()函数,即使你这样做,逻辑仍然是错误的,因为bl总是保持为真,因此while循环是一个永不停止的无限循环。试试这段代码:
public class Coder extends AppCompatActivity {
TextView display;
String one;
boolean bl= true;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_coder);
display = (TextView) findViewById(R.id.text);
all();
}
void all() {
Random rand = new Random();
int n = rand.nextInt(2);
one = n + display.getText().toString();
display.setText(one);
}
}
如果你想要循环,你需要在某些时候将bl变量设置为false以阻止循环无限地继续。