如何在不使用数组的情况下比较在 for 循环中生成的值

How to compare values generated in a for loop without using an array

你好,我正在创建一个程序,询问用户他们想在程序中输入多少个矩形。然后,我在 for 循环中使用这个数字,该循环会循环,同时询问用户每个矩形的名称以及矩形上 2 个角的坐标。在这个 for 循环中,在用户输入所有这些数据后,我想比较这些点以找出哪个矩形具有 max/min 面积和周长而不使用数组。这是我的代码的一部分:

    public static void main(String[] args) {
       Scanner s = new Scanner(System.in);
       process(s);
    }

    public static void process(Scanner s) {
       System.out.println("Please enter the number of rectangles as an integer");
        int rectnum;
       rectnum = s.nextInt();

       for(int i = 0; i<rectnum; i++){

       System.out.println("PLease enter the rectangle's name as a single letter");
       String rectname;
       rectname = s.next();

       System.out.println("Please enter the x value of one coordinate 
                                               of the rectangle" );
       int xcoor1;
       xcoor1 = s.nextInt();

       System.out.println("Please enter the y value of the same coorinate 
                                                         of the rectangle");

       int ycoor1;
       ycoor1 = s.nextInt();

       System.out.println("Please enter the x value of annother 
                                                 coordinate of the rectangle");

       int xcoor2;
       xcoor2 = s.nextInt();

       System.out.println("Please enter the y value of the same 
                                                 coordinate of the rectangle");
       int ycoor2;
       ycoor2 = s.nextInt();
      int Perim;
        Perim = 2 *(java.lang.Math.abs(ycoor1 - ycoor2)+
                        java.lang.Math.abs(xcoor1 - xcoor2));
        int Area;
        Area = java.lang.Math.abs((ycoor1 - ycoor2) * (xcoor1 - ycoor2));
        /*
         * ....
        */
 }}

您可以创建一个名为 class 的矩形来存储相关值以及矩形的名称。在 class 中创建 4 个对象,并将它们命名为 maxArea、minArea、maxPerimeter 和 minPerimeter。在循环用户输入时,一旦遇到新的最大面积、最小面积、最小周长或最大周长,请立即替换对象的相关值。

这种方法的优点是其 space 要求保持不变,无论用户输入的矩形数量如何。

尝试这样的事情

int pMax=Integer.MIN_VALUE,pMin=Integer.MAX_VALUE;
int aMax=Integer.MIN_VALUE,aMin=Integer.MAX_VALUE;

在你的循环中,在计算输入矩形的面积和周长后,你可以将它与现有的最大值和最小值进行比较,并根据需要更新它们。

即:

if(area<aMin)
    aMin=area;
if(area>aMax)
    aMax=area;
if(perim<pMin)
    pMin=perim;
if(perim>pMax)
    pMax=perim;

我建议你从 Rectangle POJO

public class Rectangle {
    private final char name;
    private final int x1;
    private final int x2;
    private final int y1;
    private final int y2;
    public Rectangle(char name, int x1, int x2, int y1, int y2) {
        this.x1 = x1;
        this.x2 = x2;
        this.y1 = y1;
        this.y2 = y2;
        this.name = name;
    }
    @Override
    public String toString() {
        return String.format("%s : (%d, %d) (%d, %d)",
            Character.toString(name), x1, y1, x2, y2);
    }
    // ...
}

当然 ... 可以是您想要的任何其他方法。