需要帮助找出我的代码有什么问题。我正在服用 开始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);
}
}
}
答案 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);
}
}
}