Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/320.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 改进操作顺序并测试值是否有小数点_Java_Operator Precedence - Fatal编程技术网

Java 改进操作顺序并测试值是否有小数点

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

我试图创建一个程序,打印出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;
        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++;
}
否则{
} 
}
}
这只是我上述计划的一部分。我现在有两个问题:

  • 我不知道如何正确执行操作顺序。我所做的是将操作n(3n-1)/2分解为第一部分和第二部分。这是好的做法吗
  • 查看while循环中的嵌套if,我试图测试
    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刚刚注意到了这一点。谢谢你突出显示它。:)