代码效率。使用循环的有效方法

时间:2013-12-20 04:43:48

标签: java loops if-statement switch-statement performance

我正在构建一个Web应用程序框架,并希望执行某些简单的任务,如输入检索和显示它们。下面是代码,我觉得代码可以改进而且效率不高。注意:所有三种方法都具有相同的实现。

Switch需要在IF循环中实现两次,而另一种情况需要在一般情况下实现。

    public class selector8
{
      public static void main (String [] args){

    selector8 obj1 = new selector8();
    Scanner inputString = new Scanner (System.in);
    Scanner inputYN = new Scanner (System.in);
    String input, A,B,C;

    System.out.println("Choose. A || B || C || X to exit");
    input = inputString.nextLine();
    char contLoop1 = 'y';
    do{
        if(input.equalsIgnoreCase("y")) {
            input = "";
            System.out.println("Choose. A || B || C || X to exit");
            input = inputString.nextLine();
            switch (input){

            case("a"):
                obj1.startMethod1(input);
                break;

            case("b"):
                obj1.startMethod2(input);
                break;

            case("c"):
                obj1.startMethod3(input);
                break;

            case("x"):
                System.out.println("Goodbye");
                break;

            case ("n"):
                System.out.println("See ya");
                break;

            default:
                    System.out.println("Invalid argument. Try again");
                    break;

                }
        } else
        switch (input){

        case("a"):
            obj1.startMethod1(input);
            break;

        case("b"):
            obj1.startMethod2(input);
            break;

        case("c"):
            obj1.startMethod3(input);
            break;

        case("x"):
            System.out.println("Goodbye");
            break;

        case ("n"):
            System.out.println("See ya");
            break;

        default:
                System.out.println("Invalid argument. Try again");
                break;

            }
            System.out.println("Do want to try again " +"Y/N" );
            input = inputYN.nextLine(); 
            contLoop1 = input.charAt(0);
    }while(contLoop1 != 'n');
}

public void startMethod1(String A){
    String input;

    Scanner inputString = new Scanner (System.in);
    System.out.println("Enter a or b");
    input = inputString.nextLine();

    switch (input){

    case("a"):
        System.out.println("output parsed");
    break;

    case("b"):
        System.out.println("output parsed");
    break;

    default:
        System.out.println("Invalid argument");
    }
}

public void startMethod2(String B){

    String input;
    Scanner inputString = new Scanner (System.in);
    System.out.println("Enter a or b");
    input = inputString.nextLine();
    switch (input){
    case("a"):
        System.out.println("output parsed");
    break;
    case("b"):
        System.out.println("output parsed");
    break;

    default:
        System.out.println("Invalid argument");
        break;
    }
}

public void startMethod3(String C){

    String input;
    Scanner inputString = new Scanner (System.in);
    System.out.println("Enter a or b");
    input = inputString.nextLine();
    switch (input){
    case("a"):
        System.out.println("output parsed");
    break;
    case("b"):
        System.out.println("output parsed");
    break;

    default:
        System.out.println("Invalid argument");
    }
}
}

另外,您还可以告诉我为什么没有对象就可以调用静态类?

public class StaticImplementation{
public static void main (String [] args){
StaticImplementation obj1 = new StaticImplementation();
obj1.stat(); //is invalid
stat(); //is valid
}
static void stat(){
    System.out.println("Static class");
}

非常感谢。祝你有美好的一天!

3 个答案:

答案 0 :(得分:2)

使用Java你可能采取更“面向对象”的方法并将这些开关留给C编程:)

做类似的事情:

interface Action {
    void start();
}

class Jumper implements Action {
    public void start() {
        System.out.println("Jump!");
    }
}

class Sitter implements Action {
    public void start() {
        System.out.println("Sit!");
    }
}

class Runner implements Action {
    public void start() {
        System.out.println("Run!");
    }
}

class Test {
    public static void main(String[] args) {
        // init phase
        Map<String, Action> map = new HashMap<String, Action>();
        map.put("a", new Jumper());
        map.put("b", new Runner());

        // usage
        map.get("a").start();
    }
}

你可以有两个地图一个用于Y而另一个用于其余的,你也可以有一个由两个字符串组成的密钥对

答案 1 :(得分:1)

哦,是的,它可以。你不需要两个扫描仪,我会把你的开关提取到一个方法(让我们称之为startMethods),就像这样 -

private static void startMethods(selector8 obj1,
    String input) {
  switch (input) {
  case ("a"):
    obj1.startMethod1(input);
    break;
  case ("b"):
    obj1.startMethod2(input);
    break;
  case ("c"):
    obj1.startMethod3(input);
    break;
  case ("x"):
    System.out.println("Goodbye");
    break;
  case ("n"):
    System.out.println("See ya");
    break;
  default:
    System.out.println("Invalid argument. Try again");
    break;
  }
}

public static void main(String[] args) {
  selector8 obj1 = new selector8();
  Scanner inputString = new Scanner(System.in);
  String input, A, B, C;

  System.out.println("Choose. A || B || C || X to exit");
  input = inputString.nextLine();
  char contLoop1 = 'y';
  do {
    if (input.equalsIgnoreCase("y")) {
      input = "";
      System.out.println("Choose. A || B || C || X to exit");
      input = inputString.nextLine();
      startMethods(obj1, input);
    } else
      startMethods(obj1, input);
    System.out.println("Do want to try again "
        + "Y/N");
    input = inputString.nextLine();
    contLoop1 = input.charAt(0);
  } while (contLoop1 != 'n');
}

答案 2 :(得分:1)

试试这个:

public class Selector8 {
    public static void main(String[] args) {

        Selector8 obj1 = new Selector8();
        Scanner inputString = new Scanner(System.in);
        Scanner inputYN = new Scanner(System.in);
        String input, A, B, C;

        System.out.println("Choose. A || B || C || X to exit");
        input = inputString.nextLine();
        char contLoop1 = 'y';
        while (contLoop1 != 'n') {
            if (input.equalsIgnoreCase("y")) {
                System.out.println("Choose. A || B || C || X to exit");
                input = inputString.nextLine();
            } 
            switch (input) {

            case ("a"):
            case ("b"):
            case ("c"):
                obj1.startMethod();
                break;
            default:
                System.out.println(validate(input));
                break;

            }
            System.out.println("Do want to try again " + "Y/N");
            input = inputYN.nextLine();
            contLoop1 = input.charAt(0);
        }
    }

    public static String validate(String input) {
        if (input.equalsIgnoreCase("x"))
            return "Goodbye";

        if (input.equalsIgnoreCase("n"))
            return "See ya";

        return "Invalid argument. Try again";
    }

    public void startMethod() {
        Scanner inputString = new Scanner(System.in);
        System.out.println("Enter a or b");
        String input = inputString.nextLine();

        switch (input) {
        case ("a"):
        case ("b"):
            System.out.println("output parsed");
            break;
        default:
            System.out.println("Invalid argument");
        }
    }
}