如何找到小于输入的最接近的完美正方形,或者完美正方形可以作为输入
How do I find the closest perfect square less than the input, or the perfect square can be the input
我想编写一个程序,获取一个数字输入并找到最接近的完美正方形以确定正方形的长度。因此,最接近的完美正方形必须小于输入。例如,如果输入是 8,则正方形的最大边长是 2。问题是程序会要求我输入一个数字,但之后没有任何输出。它还说我有一个重复的局部变量 a1。
import java.util.Scanner;
public class J1 {
public static void main(String[] args) {
int a;
int a1;
Scanner number = new Scanner(System.in);
System.out.println("Number: ");
a = number.nextInt();
int n = (int) Math.sqrt(a1);
/* remove int from a1 */
for ( int a1=a; a1<a; a1--) {
if (Math.floor(a1)==0)
System.out.println("The largest square has side length" + a1);
}
}
}
正如 Elliott 在评论中提到的,从未进入循环。
原因:a1 被分配了 a 的值,然后您正在检查 a1.这是不正确的,因此 for-loop 甚至在第一次迭代之前就终止了。对于您要实现的目标,请使用:
for (a1=a; a1 >= 0; a1--) {
if (Math.floor(a1)==0)
System.out.println("The largest square has side length" + a1);
}
如果我对你的问题理解正确的话,我认为你想让a1的值减小直到达到0。也许你需要
for ( a1=a; a1 >= 0; a1--) {
if (Math.floor(a1)==0)
System.out.println("The largest square has side length" + a1);
}
更新编辑:从循环内的 a1 中删除了声明 int,因为它可能是另一个错误的来源(a1 的双重声明)。
其他人指出的代码存在各种问题,我相信您会接受这些问题。不过,为了解决您的问题,我会做这样的事情。 while 循环让您不断尝试新值,直到输入 -1。
public static void main(String[] args) {
System.out.println("Enter value:");
Scanner sc = new Scanner(System.in);
while (sc.hasNext()) {
boolean hasPerfectSquare = false;
int input = sc.nextInt();
if (input == -1) {
break;
}
for (int i = input; i > 0; i--) {
if (Math.floor(Math.sqrt(i)) == Math.sqrt(i)) {
hasPerfectSquare = true;
System.out.println((int) Math.sqrt(i));
break;
}
}
if (!hasPerfectSquare) {
System.out.println("No perfect square");
}
System.out.println("Enter value:");
}
}
我想编写一个程序,获取一个数字输入并找到最接近的完美正方形以确定正方形的长度。因此,最接近的完美正方形必须小于输入。例如,如果输入是 8,则正方形的最大边长是 2。问题是程序会要求我输入一个数字,但之后没有任何输出。它还说我有一个重复的局部变量 a1。
import java.util.Scanner;
public class J1 {
public static void main(String[] args) {
int a;
int a1;
Scanner number = new Scanner(System.in);
System.out.println("Number: ");
a = number.nextInt();
int n = (int) Math.sqrt(a1);
/* remove int from a1 */
for ( int a1=a; a1<a; a1--) {
if (Math.floor(a1)==0)
System.out.println("The largest square has side length" + a1);
}
}
}
正如 Elliott 在评论中提到的,从未进入循环。 原因:a1 被分配了 a 的值,然后您正在检查 a1.这是不正确的,因此 for-loop 甚至在第一次迭代之前就终止了。对于您要实现的目标,请使用:
for (a1=a; a1 >= 0; a1--) {
if (Math.floor(a1)==0)
System.out.println("The largest square has side length" + a1);
}
如果我对你的问题理解正确的话,我认为你想让a1的值减小直到达到0。也许你需要
for ( a1=a; a1 >= 0; a1--) {
if (Math.floor(a1)==0)
System.out.println("The largest square has side length" + a1);
}
更新编辑:从循环内的 a1 中删除了声明 int,因为它可能是另一个错误的来源(a1 的双重声明)。
其他人指出的代码存在各种问题,我相信您会接受这些问题。不过,为了解决您的问题,我会做这样的事情。 while 循环让您不断尝试新值,直到输入 -1。
public static void main(String[] args) {
System.out.println("Enter value:");
Scanner sc = new Scanner(System.in);
while (sc.hasNext()) {
boolean hasPerfectSquare = false;
int input = sc.nextInt();
if (input == -1) {
break;
}
for (int i = input; i > 0; i--) {
if (Math.floor(Math.sqrt(i)) == Math.sqrt(i)) {
hasPerfectSquare = true;
System.out.println((int) Math.sqrt(i));
break;
}
}
if (!hasPerfectSquare) {
System.out.println("No perfect square");
}
System.out.println("Enter value:");
}
}