2015-01-16 19 views
0

您好,我正在创建一个程序,要求用户在程序中输入多少个矩形。然后,我在for循环中使用这个数字,循环时询问用户每个矩形的名称以及矩形上2个角的坐标。在这个for循环中,在用户输入所有这些数据之后,我想比较这些点以找到哪个矩形具有最大/最小面积和周长而不使用数组。这是我的代码的一部分:如何在不使用数组的情况下比较for循环中生成的值

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)); 
     /* 
     * .... 
     */ 
}} 
+0

尝试为循环外的区域和边界创建最大/最小变量,并在发现新区域时更新它们。 – kirbyquerby

+2

为什么你不想使用数组?你需要在处理方法之外的矩形,还是只需要最小/最大矩形? –

+0

我会用什么样的代码来更新它?你能举个例子吗?谢谢 – user3440080

回答

0

尝试这样的事情

​​

而你的循环内,计算面积和输入长方形的周长后,你可以把它比现有的马克塞斯和分钟,根据需要更新它们。

即:

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

好的,所以把第一个盒子放在循环前面以便初始化变量? – user3440080

+0

是的,将声明保留在for循环之外,以便以后可以使用它们 – kirbyquerby

+0

好了,我应该保留用于计算最小和最大值的函数,或者重命名与它们相关的变量? – user3440080

0

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

无论用户输入多少个矩形,此方法的优点是在空间要求上保持不变。

1

我建议你开始一个RectanglePOJO

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); 
    } 
    // ... 
} 

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

相关问题