Java 如何找到小于输入的最近的完美正方形,或者完美正方形可以是输入

Java 如何找到小于输入的最近的完美正方形,或者完美正方形可以是输入,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;

我想做一个程序,得到一个数字输入,并找到最接近的完美正方形来确定正方形的长度。因此,最接近的完美平方必须小于输入。例如,如果输入为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); 

        }
    }
}
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我更新了我的初始答案,以解决“重复局部变量”问题。