Java 改进操作顺序并测试值是否有小数点
我试图创建一个程序,打印出n=100的五边形数字。当n=1、2、3时,五边形数被定义为n(3n-1)/2,因此第一个五边形数将是1、5、12、22……等等Java 改进操作顺序并测试值是否有小数点,java,operator-precedence,Java,Operator Precedence,我试图创建一个程序,打印出n=100的五边形数字。当n=1、2、3时,五边形数被定义为n(3n-1)/2,因此第一个五边形数将是1、5、12、22……等等 package mathematical.functions.test; import java.util.Scanner; public class MathematicalFunctionsTest { public static int getPentagonalNumber(int n) { int i = 0
package mathematical.functions.test;
import java.util.Scanner;
public class MathematicalFunctionsTest {
public static int getPentagonalNumber(int n) {
int i = 0;
double part_one = (3 * n) - 1;
double part_two = part_one / 2;
while (i < 100){
if (part_two == int(part_two))
{
System.out.println(n);
i++;
}
else{
}
}
}
package mathematic.functions.test;
导入java.util.Scanner;
公共类数学函数{
公共静态int getPentagonalNumber(int n){
int i=0;
双部分_-one=(3*n)-1;
两部分=一部分/2;
而(i<100){
if(part_two==int(part_two))
{
系统输出println(n);
i++;
}
否则{
}
}
}
这只是我上述计划的一部分。我现在有两个问题:
part_two
是否为整数(即没有小数)。我尝试了很多方法,但Java不允许我包含%
运算符您缺少方程的一部分(因子n)。您可以将它们组合成一个语句,如下所示:
double num = n * (3 * n - 1) / 2
只需像平常一样使用括号,Java理解正确的操作顺序
请尝试以下操作以检查数字是否为整数:
if ((num == Math.floor(num)) && !Double.isInfinite(num)) {
// integral type
}
这是通过对数字进行拼凑(截断小数点)并检查其是否与原始数字相同来实现的。它还添加了检查以确保数字是有限的
我不知道如何正确执行操作顺序。我所做的是将操作n(3n-1)/2分解为第一部分和第二部分。这是好的做法吗
是的,这样做是可以的。或者,您可以使用()
并按如下方式执行:
double part_one = n * (3 * n - 1) / 2;
查看while循环中的嵌套if,我试图测试part_two是否为整数(即没有小数)。我尝试了很多方法,但Java不允许。我也尝试使用%运算符。但它也不允许我使用
我不知道这个用例,但是如果您想看看它是否能够解析为整数,那么您可以这样做:
while (i < 100){
String str = String.valueOf(part_two);
int conv = Integer.parseInt(str.substring(0, str.indexOf("."))));
if(part_two - conv == 0) {
/* Yes */
} else {
/* No */
}
}
while(i<100){
String str=String.valueOf(第二部分);
int conv=Integer.parseInt(str.substring(0,str.indexOf(“.”));
如果(第二部分-conv==0){
/*对*/
}否则{
/*没有*/
}
}
正如其他人所说,等式的语法并不难。n(3n-1)/2
会变成n*(3*n-1)/2
尽管如果你想从中得到一个正确的双精度,你需要将其中一个数字变成一个双精度,否则每个答案都会变成一个整数n*(3.0*n-1)/2.0
除了语法之外,检测double是否为整数是正确的
public static boolean isInteger(double d) {
return d == (int) d;
}
public static void main(String[] args) {
for(int i = 0; i < 10; i++) {
double num = i * (3.0*i- 1) / 2.0;
if(isInteger(num)) System.out.println("("+i+", "+num+")");
}
/* Result:
(1, 1.0)
(2, 5.0)
(3, 12.0)
(4, 22.0)
(5, 35.0)
(6, 51.0)
(7, 70.0)
(8, 92.0)
(9, 117.0)
*/
}
公共静态布尔isInteger(双d){
返回d==(int)d;
}
公共静态void main(字符串[]args){
对于(int i=0;i<10;i++){
双数值=i*(3.0*i-1)/2.0;
if(isInteger(num))System.out.println(“(“+i+”,“+num+”)”);
}
/*结果:
(1, 1.0)
(2, 5.0)
(3, 12.0)
(4, 22.0)
(5, 35.0)
(6, 51.0)
(7, 70.0)
(8, 92.0)
(9, 117.0)
*/
}
如果你将它用于真正的大数字,比100大得多,我建议第一部分将是n/2
,第二部分将是3*n-1
,以避免溢出。使用余数运算符而不是除法,并检查它是否返回零,如果返回零,则数字是五边形的。即如果(n*(3*n-1)%2)==0{System.out.println(n)}
。您可能不需要其他数字,因为您不想打印五边形数字以外的数字。您可以使用somedouble或float%1==0
来测试某个数字是否没有小数。如果您的问题已得到回答,请将其中一个答案标记为“已接受”,以帮助将来有类似问题的用户。计算是还有一个系数n
@docksteaderluke刚刚注意到了这一点。谢谢你突出显示它。:)