布局文件代码
<? xml version= "1.0" encoding= "utf-8" ?>
<LinearLayout xmlns: android ="http://schemas.android.com/apk/res/android"
android :layout_width= "match_parent"
android :layout_height= "match_parent"
android :orientation= "vertical"
>
<EditText
android :id= "@+id/etNum"
android :layout_width= "match_parent"
android :layout_height= "wrap_content" />
<Button
android :onClick= "cal"
android :text= "点击按钮"
android :layout_width= "wrap_content"
android :layout_height= "wrap_content" />
</LinearLayout>
主程序代码
package com.eson.calprime ;
import android.os.Bundle ;
import android.os.Handler ;
import android.os.Looper ;
import android.os.Message ;
import android.support.v7.app.AppCompatActivity ;
import android.view.View ;
import android.widget.EditText ;
import android.widget.Toast ;
import java.util.ArrayList ;
import java.util.List ;
public class CalPrime extends AppCompatActivity {
static final String UPPER_NUM= "upper" ;
CalThread calThread ;
private EditText etNum ;
class CalThread extends Thread{
public Handler mHandler;
public void run (){
Looper.prepare ();
mHandler = new Handler(){
//定义处理消息的方法
@Override
public void handleMessage (Message msg) {
if (msg. what ==0x123 ){
int upper=msg.getData().getInt( UPPER_NUM) ;
List<Integer> nums= new ArrayList<>();
//计算从2开始,到upper的所有质数
outer:
for (int i = 2; i <=upper ; i++) {
//用i除以2开始,到i的平方根的所有数
for (int j = 2; i <=Math. sqrt(i) ; i++) {
//如果可以整除,则表明这个数不是质数
if (i!=2 &&i%j== 0){
continue outer;
}
}
nums.add(i) ;
}
//使用Toast显示统计出来的所有质数
Toast. makeText(CalPrime. this,nums.toString() , Toast. LENGTH_LONG).show() ;
}
}
};
Looper. loop() ;
}
}
@Override
protected void onCreate (Bundle savedInstanceState) {
super .onCreate(savedInstanceState) ;
setContentView(R.layout. content_main );
etNum = (EditText) findViewById(R.id. etNum );
calThread = new CalThread() ;
//启动线程
calThread .start() ;
}
//为按钮点击事件提供事件处理函数
public void cal (View v){
//创建消息
Message msg= new Message();
msg. what =0x123 ;
Bundle bundle= new Bundle();
bundle.putInt( UPPER_NUM ,Integer. parseInt( etNum .getText().toString()));
msg.setData(bundle) ;
//向新线程中的Handler发送消息
calThread . mHandler.sendMessage(msg) ;
}
}