【发布时间】:2013-12-06 16:07:23
【问题描述】:
我正在尝试编写和应用程序,当按下按钮时,它将显示从 23 到 499 的所有素数。现在,我知道我的算法是正确的,所以这不是问题,因为我可以运行它在其他一些 Java 开发程序中使用 Sopln。我认为问题在于我使用了一个线程,因为我以前从未使用过线程,或者我使用了一个可运行的线程。我也可以将整数附加到 TextView,但是,由于我是新手,所以我不知道。非常感谢任何帮助,如果您需要更多上下文,我将很乐意提供。谢谢...
public class PrimeNumbers extends Activity implements OnClickListener {
Button whatPrime, howManyPrime, resetPrime;
TextView numPrime, ctPrime;
int prime = 23, factor, ct = 0;;
StringBuilder strBuPrime;
String strPrime;
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.primenumbers);
initialize();
whatPrime.setOnClickListener(this);
howManyPrime.setOnClickListener(this);
resetPrime.setOnClickListener(this);
}// end onCreate
private void initialize() {
// TODO Auto-generated method stub
whatPrime = (Button) findViewById(R.id.bPrime);
howManyPrime = (Button) findViewById(R.id.bPrimeCount);
resetPrime = (Button) findViewById(R.id.bPrimeReset);
numPrime = (TextView) findViewById(R.id.tvPrimeNumbers);
ctPrime = (TextView) findViewById(R.id.tvPrimeNumbersCount);
}// end initialize
Runnable findPrimes = new Runnable() {
@Override
public void run() {
while (prime <= 499 && prime >= 23) {
factor = 3;
while (prime % factor != 0) // if true start testing
// other
// factors
{
while (factor <= (Math.sqrt(prime))) // testing
// other
// factors
{
if (prime % factor == 0) // factor found, leave
// while
{
factor = 2000;
}
factor++;
}
if (factor != 2001) // no factor found but left
// while, print
// prime, add 1 to counter
{
strPrime = Integer.toString(prime);
strBuPrime.append(strPrime + '\n');
}
factor = 1; // leave while as 1 is a factor of
// everything
}
prime += 2; // test next prime
}
numPrime.post(new Runnable() {
@Override
public void run() {
numPrime.setText(strBuPrime);
}
});
}
};
Thread threadPrimes = new Thread(findPrimes);
@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
switch (arg0.getId()) {
case R.id.bPrime:
threadPrimes.start();
break;
case R.id.bPrimeCount:
ctPrime.setText("There are " + ct
+ " prime numbers from 23 to 499.");
break;
case R.id.bPrimeReset:
numPrime.setText("");
ctPrime.setText("");
break;
}
}// end onClick
}
【问题讨论】:
-
请发布logcat
-
喜欢评论而不是格式不是一个好主意。您始终可以在循环上方堆叠一组 cmets,解释其目的或功能,但让它们偏移并允许它们将括号向下推对您的代码没有任何好处。
-
"
S.o.pln",你真的需要缩写吗?我花了大约 5 秒钟才弄清楚你在说什么…… -
如何将 logcat 放到这里,那是什么?
标签: java android while-loop append runnable