首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我如何将两种方法组合在一起,它们所做的事情相同,但类型不同?

我如何将两种方法组合在一起,它们所做的事情相同,但类型不同?
EN

Stack Overflow用户
提问于 2015-07-01 18:42:10
回答 3查看 73关注 0票数 1

我对java编程相当陌生,虽然我知道一些基本知识,但我觉得我的代码很长而且没有必要。我想知道是否有一种方法可以将我的elkStarter()foxStarter()方法组合成一个starter()方法,这样我就可以减少代码。

代码语言:javascript
复制
//Opening question, askes user to pick either an elk or fox
    public void systemStart(){
        for(int i =0;i<=100;i++){
           System.out.println("- - - - - - - - - - - - - - - - - -\n");
    }
    System.out.println("***STARTING NEW MOVEMENT MODEL***\n"+"-----------------------------------\n");
    iteration = 0;
    String animalType = JOptionPane.showInputDialog
                     ("Would you like an elk or a fox?");

    switch (animalType.toLowerCase()){
        case "elk": elkStarter("elk_1");
        break;
        case "fox": Foxtarter("fox_1"); 
        break;
        default: JOptionPane.showMessageDialog (null, "You didn't enter elk or fox..Please try again.");
        runAnotherModel();
        break;
    }
}

//systemStater goes to when "elk" is selected as the animal type.
public void elkStarter(){
    Elk elk_1 = new Elk();
    elk_1.namer("elk_1");
    System.out.println("You have just created an Elk called " + elk_1.name + ".\n" +
    "It has begun its life at (0,-0).");        
    elk_1.findPosition();

    JOptionPane.showMessageDialog (null, "Lets let our new elk roam a bit, shall we?");


    int loop = 0;                 
    while(loop==0){
        String animalDirection = JOptionPane.showInputDialog
                     ("Which way should our elk move? (forward(f), backward(b), up(u), down(d)) or type stop(s) to quit.");
        switch(animalDirection.toLowerCase()){
            case "forward": case "f":
            elk_1.walkForward();
            elk_1.findPosition();
            break;
            case "backward": case "b":
            elk_1.walkBackward();
            elk_1.findPosition();
            break;
            case "up": case "u":
            elk_1.walkUp();   
            elk_1.findPosition();
            break;
            case "down": case "d":
            elk_1.walkDown();
            elk_1.findPosition();
            break;
            case "stop": case "s":
            JOptionPane.showMessageDialog (null, "GoodBye! Thanks for trying my model!");
            loop=1;
            break;
            default: JOptionPane.showMessageDialog (null, "ummmm sorry that wasn't a direction...Please try again.");
            break;
        }
    }
}

//systemStater goes to when "fox" is selected as the animal type.
public void foxStarter(){
    Fox fox_1 = new Fox();
    fox_1.namer("fox_1");
    System.out.println("You have just created an Fox called " + fox_1.name + ".\n" +
    "It has begun its life at (0,-0).");        
    fox_1.findPosition();

    JOptionPane.showMessageDialog (null, "Lets let our new fox roam a bit, shall we?");


    int loop = 0;                 
    while(loop==0){
        String animalDirection = JOptionPane.showInputDialog
                     ("Which way should our fox move? (forward(f), backward(b), up(u), down(d)) or type stop(s) to quit.");
        switch(animalDirection.toLowerCase()){
            case "forward": case "f":
            fox_1.walkForward();
            fox_1.findPosition();
            break;
            case "backward": case "b":
            fox_1.walkBackward();
            fox_1.findPosition();
            break;
            case "up": case "u":
            fox_1.walkUp();   
            fox_1.findPosition();
            break;
            case "down": case "d":
            fox_1.walkDown();
            fox_1.findPosition();
            break;
            case "stop": case "s":
            JOptionPane.showMessageDialog (null, "GoodBye! Thanks for trying my model!");
            loop=1;
            break;
            default: JOptionPane.showMessageDialog (null, "ummmm sorry that wasn't a direction...Please try again.");
            break;
        }
    }
}
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-07-01 18:54:02

如果类ElkFox具有相同的父类(例如- Animal ),那么我相信有多种方法可以使这两个初学者函数成为一个函数。

  1. 您可以让start函数的调用方发送对象来处理,例如- 公共无效commonStarter(动物动物){. //做你对动物的逻辑。}
  2. 或者,您可以向您的starter函数发送一个参数,该参数将决定是创建Elk还是Fox,然后基于此在您的类中创建正确的- public void commonStarter(boolean ){动物动物=无;if(isElk) {=新Elk();}= new ();}. //执行您的逻辑。}
票数 1
EN

Stack Overflow用户

发布于 2015-07-01 18:48:06

最好的方法是创建一个父类/接口,然后使用布尔函数调用函数,该函数定义对象是Lion还是Elk。这就是所谓的类层次结构。

所以你只会替换代码的一部分。

代码语言:javascript
复制
Animal somename;
if (isElk)
   somename = new Elk();
else
   somename = new Fox();

其中isElk将是一个布尔值,如果用户想要创建一个新的Elk对象,这个值将为true;如果用户想要创建一个新的Fox对象,则为false。

票数 0
EN

Stack Overflow用户

发布于 2015-07-01 18:52:01

您可以创建一个接口,并根据用户输入调用所需的实现。

类似于:

代码语言:javascript
复制
public interface Starter {
    void start();
}

public class ElkStarter implements Starter {

    private String name;
    // + constructor, getters, setters

    @Override
    public void start() {
        // ...
    }
}

// ...

public Starter getStarter(String animalType) {
    switch (animalType.toLowerCase()) {
      case "elk": return new ElkStart("elk_1");
      case "fox": return new FoxStart("fox_1");
      default: return null;
    }
}

public void systemStart() {
    // ...
    Starter starter = getStarter(animalType);
    // at this point, you do not know what Starter actually is
    if(starter != null) {
        starter.start();
    } else {
        // ...
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31169216

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档