如何在不使用数组的情况下比较在 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);
}
// ...
}
当然 ...
可以是您想要的任何其他方法。
你好,我正在创建一个程序,询问用户他们想在程序中输入多少个矩形。然后,我在 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);
}
// ...
}
当然 ...
可以是您想要的任何其他方法。