簡體   English   中英

Java壓縮一些代碼

[英]Java compressing some code

Java的新手,我希望更改以下內容,以允許同一變量調用僅發生一次。

第二個“ b”變量僅在矩形和三角形期間調用。 這確實有用,只是想看看我是否可以從主要內容中獲得額外的一行。

無法將“ b”變量從if語句中移出,因為該程序將不會啟動,因為用戶僅輸入a變量。

import java.util.*;

public class Main {

    public static void main(String[]args) {
        Scanner in = new Scanner(System.in);
        System.out.print("? ");
        String word = in.next();    
        Shape s = null;
        while (!word.equals("quit")) {
            double a = in.nextDouble();
            if (word.equals("triangle")){
                double b = in.nextDouble();
                s = new Shapet (a, b);
            }else if (word.equals("rectangle")){
                double b = in.nextDouble();
                s = new Shaper (a, b);          
            }else if (word.equals("square")){
                s = new Shapes (a);             
            }else if (word.equals("circle")){
                s = new Shapec (a);             
            }else if (word.equals("pentagon")){
                s = new Shapep (a);             
            }
            System.out.printf("Area of %s = %.2f\n", s, s.area());      
            System.out.print("? ");
            word = in.next();
        }
    }
}

您可以使用switch,它不會使代碼更短但更易讀:

String word = in.next();    
Shape s = null;
while (!word.equals("quit")) {
   double a = in.nextDouble();
   switch(word) {
    case "triangle":
        s = new Shapet (a, in.nextDouble());
        break;
    case "rectangle":
        s = new Shaper (a, in.nextDouble());    
        break;      
    case "square":
        s = new Shapes (a); 
        break;            
    case "circle":
        s = new Shapec (a);  
        break;           
    case "pentagon":
        s = new Shapep (a);      
        break;       
   }
   word = in.next(); 
 }

如果我在您的位置,我將代碼保留不變,只需將變量名更改為更合適的名稱即可。

我會讓if語句中的每個塊都處理自己的變量。 這將使代碼更易於閱讀。

像這樣:

 while (!word.equals("quit")) {
        if (word.equals("triangle")){
            double base = in.nextDouble();   //You could maybe print out 'Enter base length, or something like that, same goes for the one below.
            double height = in.nextDouble();
            s = new Shapet (base, height);
        }

在這種情況下,我假設您要計算某種形狀的面積並可能對其進行渲染。 如果不是這種情況,那么將Shapet重命名為可以提供有關Shapet更多信息的內容也可能會有所幫助。

請記住,盡管您不應該編寫腫的代碼,但是可讀性是關鍵。 因此,如果您需要多花幾行以使代碼更易於遵循,則在大多數情況下,您應該采用這種方式。

我認為變量在if內,並且它們都是局部的。 因此,您可以將它們從if中移除。 因為您正在學習Java,所以我建議您更改類名以使其更面向對象。 您還可以對ShapeType使用枚舉。 我認為這是您的問題,但我希望這可以幫助您獲得更好的視圖(請同時將變量“ a”,“ b”更改為有意義的變量。我仍將其保留在示例中)。

enum ShapeType {
        triangle("triangle"), rectangle("rectangle"), square("square"), circle("circle"), pentagon("pentagon");
        private String value;
        ShapeType(String value) {
            this.value = value;
        }

        public String getValue() {
            return this.value;
        }
    }


 Scanner in = new Scanner(System.in);
     String word = in.next();  
     //check the type is ok or not
     ShapeType shapeType = ShapeType.valueOf(word);

     String quit = "quit";
     Shape s = null;
     double a = in.nextDouble();
     double b = in.nextDouble();

     while (!word.equals(quit)) {
        switch(shapeType) {
         case triangle:
             s = new Triangle(a, b);
             break;
         case rectangle:
             s = new Ractangle (a, b);    
             break;      
         case square:
             s = new Square (a); 
             break;            
         case circle:
             s = new Circle (a);  
             break;           
         case pentagon:
             s = new Pentagon (a);      
             break;       
         default:
             System.out.println("Invalid shape! Pls retry");

         }
      }

如果您只想減少代碼行,則可以使用內聯代碼:

double a;
while (!word.equals("quit")) {
  a = in.nextDouble();
  if (word.equals("triangle")) {
    s = new Shapet(a, in.nextDouble());
  } else if (word.equals("rectangle")) {
    s = new Shaper(a, in.nextDouble());
  } else if (word.equals("square")) {
    s = new Shapes(a);
  }
  // ...
}

PS避免在循環內聲明變量

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM