[英]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.