Java 从editview到textview的给定数字的素数因子

Java 从editview到textview的给定数字的素数因子,java,android,Java,Android,我正在做一个活动,在这个活动中,你们在editview中写下数字(usernumber),然后在textview中,在它旁边得到素数因子(primefactor)。 我用了一些代码来解释主要的因素,但我不太懂,所以我会感谢你的帮助。 编辑:按照建议对代码进行了一些更改,但代码仍然没有执行任何操作: import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.text.Edita

我正在做一个活动,在这个活动中,你们在editview中写下数字(usernumber),然后在textview中,在它旁边得到素数因子(primefactor)。 我用了一些代码来解释主要的因素,但我不太懂,所以我会感谢你的帮助。 编辑:按照建议对代码进行了一些更改,但代码仍然没有执行任何操作:

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.text.Editable;
import android.text.TextWatcher;
import android.widget.EditText;
import android.widget.TextView;

public class activityone extends AppCompatActivity {
    EditText usernumber;
    TextView primefactor;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_one);
        usernumber = (EditText) findViewById(R.id.number);
        primefactor = (TextView) findViewById(R.id.primefactor);
        usernumber.addTextChangedListener(prvoWatcher);
    }
    private final TextWatcher prvoWatcher = new TextWatcher() {

        double f,
                c;
        @Override
        public void beforeTextChanged(CharSequence s, int start, int count, int after) {

        }

        @Override
        public void onTextChanged(CharSequence s, int start, int before, int count) {

        }

        @Override
        public void afterTextChanged(Editable s) {
            if (s.toString().equals("")){
                f = Double.parseDouble(s.toString());
                while (f%2==0)
                {
                    primefactor.setText(2 + " ");
                    f /= 2;
                }

                int i;
                for (i = 3; i <= Math.sqrt(f); i+= 2)
                {
                    // While i divides f, print i and divide n
                    while (f%i == 0)
                    {
                        primefactor.setText(i + " ");
                        f /= i;
                    }
                }

                // This condition is to handle the case whien
                // f is a prime number greater than 2
                if (f > 2)
                    primefactor.setText(String.valueOf(f));
            }



        }
    };
}
导入android.support.v7.app.app活动;
导入android.os.Bundle;
导入android.text.Editable;
导入android.text.TextWatcher;
导入android.widget.EditText;
导入android.widget.TextView;
公共类activityone扩展了AppCompatActivity{
编辑文本用户号;
文本视图基本要素;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_one);
usernumber=(EditText)findViewById(R.id.number);
primefactor=(TextView)findViewById(R.id.primefactor);
usernumber.addTextChangedListener(prvoWatcher);
}
private final TextWatcher prvoWatcher=新TextWatcher(){
双f,
C
@凌驾
更改前文本之前的公共void(字符序列s、int start、int count、int after){
}
@凌驾
public void onTextChanged(字符序列、int start、int before、int count){
}
@凌驾
公共无效后文本已更改(可编辑){
如果(s.toString().equals(“”){
f=Double.parseDouble(s.toString());
而(f%2==0)
{
primefactor.setText(2+“”);
f/=2;
}
int i;
对于(i=3;i=2)
primefactor.setText(String.valueOf(f));
}
}
};
}
提前感谢。

错误为
String.valueOf(int)

它需要整数或浮点变量,而不是数据类型

primefactor.setText(String.valueOf(int));
这不是它的工作原理,你不能把一个基本类型作为参数放在里面。根据要显示的内容,可以将
int
替换为
i
f

看来

primefactor.setText(String.valueOf(i));

编辑:当然,如果要使用
i
变量,必须在for循环之前声明if,而不是在其中

int i;
for (i = 3; i <= Math.sqrt(f); i+= 2)
{
    // While i divides n, print i and divide n
    while (f%i == 0)
    {
        primefactor.setText(i + " ");
        f /= i;
    }
}
inti;
对于(i=3;i

int是多少?

错误在哪一行?正如Kunu所说,在String.valueOf(int)中;那么我应该在那里键入什么?@Jan A VariableThank,但我已经尝试过了,它们对我都不起作用。这怎么对你不起作用?它删除了错误,对吗?是的,它删除了错误,但仍然没有显示任何数字。你的代码到了吗?你尝试过使用调试器,将断点设置到不同的行吗?我不能选中它,由于某种原因,我的手机在等待调试器屏幕时冻结。
int i;
for (i = 3; i <= Math.sqrt(f); i+= 2)
{
    // While i divides n, print i and divide n
    while (f%i == 0)
    {
        primefactor.setText(i + " ");
        f /= i;
    }
}
primefactor.setText(String.valueOf(int));