Java 如何找到小于输入的最近的完美正方形,或者完美正方形可以是输入
我想做一个程序,得到一个数字输入,并找到最接近的完美正方形来确定正方形的长度。因此,最接近的完美平方必须小于输入。例如,如果输入为8,则正方形的最大边长为2。问题是程序会要求我输入一个数字,但之后不会输出任何内容。它还说我有一个重复的局部变量a1Java 如何找到小于输入的最近的完美正方形,或者完美正方形可以是输入,java,for-loop,perfect-square,Java,For Loop,Perfect Square,我想做一个程序,得到一个数字输入,并找到最接近的完美正方形来确定正方形的长度。因此,最接近的完美平方必须小于输入。例如,如果输入为8,则正方形的最大边长为2。问题是程序会要求我输入一个数字,但之后不会输出任何内容。它还说我有一个重复的局部变量a1 import java.util.Scanner; public class J1 { public static void main(String[] args) { int a; int 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);
}
}
}
import java.util.Scanner;
公共类J1{
公共静态void main(字符串[]args){
INTA;
int a1;
扫描仪编号=新扫描仪(System.in);
System.out.println(“编号:”);
a=number.nextInt();
int n=(int)Math.sqrt(a1);
/*从a1中删除int*/
对于Elliott在评论中提到的(int a1=a;a1),永远不会进入循环。
原因:a1被分配了a的值,然后您正在检查a1是否为非真,因此for循环甚至在第一次迭代之前就被终止。对于您试图实现的目标,请使用:
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,因为它可能是另一个bug的来源(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:");
}
}
您已经告诉了我们您想做什么,但没有告诉我们您的代码尝试遇到了什么问题。您在问题标题中提到了第13行,但没有标记这是在代码中的哪一行。请编辑您的问题,使其更清楚问题所在,以便您有更好的机会让人们能够帮助您。您应该仔细查看在中的循环条件下(int a1=a;a1我已经澄清了我的问题,你能澄清一下@elliottfrisch你给变量n赋值,但从不使用它是什么意思吗?这就是你的本意吗?我该如何解决这个问题,我将a等于a1,然后开始递减,以确定与a表示的输入最接近的完美平方(int a1=a;a1>0;a1--)它表示for中有一个重复的局部变量a1loop@Cleo我更新了我的初始答案,以解决“重复局部变量”问题。