-2

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

        }
    }
}
4

3 回答 3

0

正如 Elliott 在评论中提到的那样,永远不会进入循环。原因: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); 
}
于 2019-07-13T19:07:10.987 回答
0

如果我正确理解您的问题,我认为您想让 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 的双重声明)。

于 2019-07-13T19:12:42.273 回答
0

其他人指出的代码存在各种问题,我相信你会接受它们。不过,为了解决您的问题,我会做这样的事情。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:");
    }
}
于 2019-07-13T19:26:22.463 回答