我想制作一个使用Heron算法计算平方根的Java应用程序。但是当我输入9时,它会将2.777777910232544打印到屏幕上。 当我输入1时,它打印1.现在我不知道我是否编写了错误的代码,或者我对Java中的浮点数一无所知。
这是我的代码:
public class MainActivity extends AppCompatActivity {
float length1;
float width1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
final TextView mainOutput = (TextView) findViewById(R.id.mainOutput);
final EditText mainInput = (EditText) findViewById(R.id.mainInput);
final Button wurzel2 = (Button) findViewById(R.id.wurzel2);
assert wurzel2 != null;
wurzel2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
for(int i = 0; i < 20; i++) {
float inputNumber = Integer.parseInt(mainInput.getText().toString());
length1 = 1;
width1 = inputNumber / length1;
float length2 = (length1 + width1) / 2;
float width2 = inputNumber / length2;
length1 = length2;
width1 = width2;
}
double wurzel = length1 / width1;
mainOutput.setText(String.valueOf(wurzel));
}
});
}
}
答案 0 :(得分:0)
我编写了Heron算法的非Android Java实现,该算法源自https://en.wikipedia.org/wiki/Methods_of_computing_square_roots显示的算法公式
map.animateCamera(CameraUpdateFactory.newCameraPosition(cameraPosition));
你的代码在循环内有length1 = 1(你的length1相当于我的x),所以 它没有从迭代到迭代的进展。
public class MyClass {
public static void main(String[] args) {
float x = 9;
System.out.println(heron(x));
}
static float heron(float s) {
float x = (float) 1.0; // initial approximation of result
for (int i = 0; i < 20; i++) {
float sDivX = s / x;
x = (x + sDivX) / 2;
// remove this line in production, this is just to watch progress
System.out.println(String.valueOf(x));
}
return x;
}
}
可能是比1更好的初始估计值,尤其是对于较大的值。对于输入值的小值,20次迭代可能是过度的。