Java:优化代码

Java:优化代码,java,optimization,if-statement,Java,Optimization,If Statement,我已经在这个电梯程序上工作了相当长的一段时间,最终完成了它并使它工作起来,我为自己感到非常自豪,但我想看看如何优化我的代码,以便我可以为未来学习。通过优化,我的意思是,使代码看起来更好,可能通过使用更少的代码行 static int floor = 0, choice1, person = 0; public static void main(String args[]) { floor = ((int) (Math.random() * 10 + 1)); System.

我已经在这个电梯程序上工作了相当长的一段时间,最终完成了它并使它工作起来,我为自己感到非常自豪,但我想看看如何优化我的代码,以便我可以为未来学习。通过优化,我的意思是,使代码看起来更好,可能通过使用更少的代码行

static int floor = 0, choice1, person = 0;

public static void main(String args[])
{

    floor = ((int) (Math.random() * 10 + 1));

    System.out.println("The elevator is now on floor " +floor);
    System.out.print("Which floor are you at now (0-10) where 0 = basement: ");
    choice1 = Keyboard.readInt();

    if(floor == choice1)
    {
        System.out.println("Enter the elevator");
    }

    else if(floor > choice1)
    {
        ElevatorDown();
    }

    else if(floor < choice1)
    {
        ElevatorUp();
    }

    System.out.println("To which floor would you want to go (0-10) where 0 = basement");
    choice1 = Keyboard.readInt();

    if(floor > choice1)
    {
        ElevatorDown();
    }

    else if(floor < choice1)
    {
        ElevatorUp();
    }

}

public static void ElevatorUp()
{
    System.out.println("The elevator is on it's way up...");

    for (person = choice1; choice1>=floor; floor++)

    System.out.println(floor);

    System.out.println("The elevator has arrived");
}

public static void ElevatorDown()
{
    System.out.println("The elevator is on it's way down...");
    for (person = choice1; choice1<=floor; floor--)

    System.out.println(floor);

    System.out.println("The elevator has arrived");
}
static int floor=0,choice1,person=0;
公共静态void main(字符串参数[])
{
floor=((int)(Math.random()*10+1));
System.out.println(“电梯现在在楼层”+楼层);
System.out.print(“您现在在哪一层(0-10),其中0=地下室:”;
choice1=Keyboard.readInt();
如果(楼层==选项1)
{
System.out.println(“进入电梯”);
}
否则如果(楼层>选项1)
{
升降器下降();
}
否则,如果(楼层<选项1)
{
升降器上升();
}
System.out.println(“你想去哪一层(0-10),其中0=地下室”);
choice1=Keyboard.readInt();
如果(楼层>选项1)
{
升降器下降();
}
否则,如果(楼层<选项1)
{
升降器上升();
}
}
公共静态真空升降器()
{
System.out.println(“电梯正在上升…”);
对于(person=choice1;choice1>=floor;floor++)
系统输出打印LN(楼层);
System.out.println(“电梯已经到达”);
}
公共静态空隙升降器下降()
{
System.out.println(“电梯正在下降…”);
对于(个人=选择1;选择1
  • 使用像NetBeans或Eclipse这样的IDE,让它格式化您的代码

  • 修复IDE告诉您的任何警告

  • 添加JavaDoc

  • 编辑:使您的代码成为类的一部分

  • 编辑:按照


除了Tichodroma提到的所有优点之外,您还可以在代码中进行大量的异常处理

我要消除的另一件事是doble代码部分,如:

if(floor > choice1)
{
    ElevatorDown();
}
这些部分必须被提取出来,所以它只能写一次。双代码部分通常是一个指标


所有输出部分(System.out.println…)都可以在一种输出例程中提取出来,在我看来,这对您的程序来说是更好的

祝贺

也许你想让你的程序更像OOP


例如,将电梯提取到它自己的类等。

尝试使您的代码面向对象。将电梯建模为对象。电梯可以做什么?它可以上下移动,因此您需要几种方法来实现。电梯有什么属性?它有一个当前楼层,这将是一个实例变量。Y你还需要一个建造师来建造你的电梯

确保使用有意义的变量名,并适当地注释代码

以下是一些帮助您的代码:

public class Elevator {

    // the floor that the elevator is currently on
    private int currentFloor;

    /**
     * Creates an elevator at the specified floor.
     *
     * @param initialFloor the initial floor
     */
    public Elevator(int initialFloor) {
        this.currentFloor = initialFloor;
    }

    /**
     * @return the currentFloor
     */
    public int getCurrentFloor() {
        return currentFloor;
    }

    /**
     * Moves the elevator to the specified floor.
     *
     * @param floor the floor to go to.
     */
    public void goToFloor(int floor) {
        if (floor < currentFloor) {
            goDownToFloor(floor);
        } else if (floor > currentFloor) {
            goUpToFloor(floor);
        }
        System.out.println("The elevator has arrived");
    }

    /**
     * Moves the elevator up to the specified floor.
     *
     * @param floor the floor to go up to.
     */
    private void goUpToFloor(int floor) {
        System.out.println("The elevator is on its way up...");

        //TODO: put loop to go up to the floor here
    }

    /**
     * Moves the elevator down to the specified floor
     *
     * @param floor the floor to go down to.
     */
    private void goDownToFloor(int floor) {
        System.out.println("The elevator is on its way down...");

        //TODO: put loop to go down to the floor here        
    }
}
将此方法与您当前的方法进行比较。它可以从对象和您可以对其执行的操作方面更好地建模问题。代码重复也更少

for (person = choice1; choice1>=floor; floor++)

System.out.println(floor);
这是完全合法的,但它相当混乱。此人与for循环无关

for (; floor <= choice1; floor++) {
    System.out.println(floor);
}

用于(;针对什么进行底层优化?速度、内存使用、可读性等?基本上只是为了减少代码行数,使其看起来更好、更合适。如果您正在进行此类优化,是否应该发布此消息?验证用户输入。代码行数减少并不意味着代码更好。正确缩进代码,学习Java命名约定坚持使用这些方法,在if/for/while块中始终使用大括号。添加Javadoc。每行只声明一个变量。在
if
之后添加一个空格。不要滥用静态方法,使用局部变量而不是全局变量。谢谢,但这正是我目前正在做的。我正在使用Eclipse并修复了所有警告。看起来不像那样t:)没有一个自尊的IDF会像这样格式化你的代码。我并没有真正让Eclipse格式化我的代码,我只是简单地使用Eclipse:)相反,让我给你一些提示,让你做这项工作:)哎呀。刚才看到上面已经有了一个解决方案。
for (; floor <= choice1; floor++) {
    System.out.println(floor);
}
while (floor <= choice1) {
    System.out.println(floor);
    floor++;
}