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++;
}