如何找到比输入少的最接近的完美平方,或者完美平方可以作为输入

时间:2019-07-13 18:53:57

标签: 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;

        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); 

        }
    }
}

3 个答案:

答案 0 :(得分:1)

其他人指出的代码存在各种问题,我相信您一定会接受的。为了解决您的问题,我会做这样的事情。 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:");
    }
}

答案 1 :(得分: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); 
}

答案 2 :(得分:0)

如果我正确理解了您的问题,我想您希望使a1的值减小直至达到0。也许您需要

for ( a1=a; a1 >= 0; a1--) {
        if (Math.floor(a1)==0)
        System.out.println("The largest square has side length" + a1); 
 }

UPDATE EDIT :在循环内从a1中删除了声明int,因为它可能是另一个错误的源头(a1的双重声明)。