用于唯一整数的Java for / while循环

时间:2015-07-29 01:50:40

标签: java

需要帮助找出我的代码有什么问题。我正在服用  开始java课程所以我必须使用简单的代码。

  

如果存在整数i,则整数N是唯一的,使得:N = i * i   + i以下是一些唯一数字的例子:2(因为2 = 1 * 1 + 1)6(因为6 = 2 * 2 + 2)12(因为12 = 3 * 3 + 3)

     

要求用户输入一个整数N.打印出该数字是否为   一个独特的号码。如果不打印不是唯一的号码

import java.util.Scanner;
public class task4 {

    /**
* @param args the command line arguments
*/
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        System.out.printf("Enter an integer N: ");
        int N = in.nextInt();
        boolean unique = true;
        int i = 1;
        while ((i*i)+i == N)
        {
            if ((i*i)+i != N) 
            {
                unique = false;


                i++;
            }
        }
        if (unique)
        {
            System.out.printf("%d is unique.\n",N);
        }
        else 
        {
            System.out.printf("%d is not unique.\n", N);
        }
    }
}

3 个答案:

答案 0 :(得分:1)

您的while循环仅评估1*1 + 1 == N是否为真。我不想直接给你答案,所以我会给你一个提示:你怎么能改变while循环,为每个最多N的值返回true?

还尝试重做while循环的内部。如果unique的任何值有效,请考虑如何使其true i

答案 1 :(得分:0)

这对你来说应该是有些昙花一现。检查i应始终小于while循环中的N。至少它有一些退出条件(这是合乎逻辑的)。在你的情况下,当你的(i*i)+i增长超过N时,没有退出条件。

import java.util.Scanner;
public class Task4 {

    /**
* @param args the command line arguments
*/
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        System.out.printf("Enter an integer N: ");
        int N = in.nextInt();
        boolean unique = false;
        int i = 1;
        while (((i*i)+i) <= N)
        {
            if ((i*i)+i != N) {
                i++;
            } else {
                unique = true;
                break;
            }
        }    
        if (unique)
        {
            System.out.printf("%d is unique.\n",N);

        }
        else 
        {
            System.out.printf("%d is not unique.\n", N);
        }
    }
}

答案 2 :(得分:-1)

也许你可以试试这个:

import java.util.Scanner;
public class task4 {
public static void main(String[] args) {
    Scanner in = new Scanner(System.in);
    System.out.printf("Enter an integer N: ");
    int N = in.nextInt();
    boolean unique = true;
    double sd = Math.sqrt(N);
    double fd = Math.floor(sd);
    if(sd * (sd+1) != N){
        unique = false;
    }
    if (unique)
    {
        System.out.printf("%d is unique.\n",N);
    }
    else 
    {
        System.out.printf("%d is not unique.\n", N);
    }
}

}