有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!


共 (1) 个答案

  1. # 1 楼答案

    通过将基本属性作为属性传递给每个枚举,可以减少代码量signPair使用一些基本的算术属性来计算翻转象限的序号

    public enum Quadrant { 
      Q1(true,true),
      Q2(false, true),
      Q3(false, false),
      Q4(true, false);
    
      private boolean xpos;
      private boolean ypos;
      Quadrant( boolean xpos, boolean ypos ){
        this.xpos = xpos;
        this.ypos = ypos;
      }
      public boolean xPositive(){
        return xpos;
      }
      public boolean yPositive(){
        return ypos;
      }
      public String signPair(){
        return "(" + (xpos ? "+" : "-") + "," + (ypos ? "+" : "-") + ")";
      }
      public Quadrant flipX(){
        return values()[ordinal() + 1 - 2*(ordinal()%2)];
      }
      public static Quadrant fromInts(int x, int y){
        if( x >= 0 ){
          return y >= 0 ? Quadrant.Q1 : Quadrant.Q4;
        } else {
          return y >= 0 ? Quadrant.Q2 : Quadrant.Q3;
        }
      }
    }
    

    还可以为每个枚举定义方法:

    public enum Quadrant { 
      Q1(true,true){
        public Quadrant flipX(){ return Quadrant.Q2; }
        public String signPair(){ return "(+,+)"; }
      },
      Q2(false, true){
        public Quadrant flipX(){ return Quadrant.Q1; }
        public String signPair(){ return "(-,+)"; }
      },
      Q3(false, false){
        public Quadrant flipX(){ return Quadrant.Q4; }
        public String signPair(){ return "(-,-)"; }
      },
      Q4(true, false){
        public Quadrant flipX(){ return Quadrant.Q3; }
        public String signPair(){ return "(+,-)"; }
      };
      //...
      public abstract String signPair();
      public abstract Quadrant flipX();
      //...
    }
    

    这里有一个测试:

    public static void main(String[] args) {
      for( Quadrant q: Quadrant.values() ){
        System.out.println( q );
        System.out.println( q.xPositive() );
        System.out.println( q.yPositive() );
        System.out.println( q.signPair() );
        System.out.println( q.flipX() );
      }
      for( int x = -1; x <= 1; ++x ){
        for( int y = -1; y <= 1; ++y ){
          System.out.println( Quadrant.fromInts(x, y) );
        }
      }
    }
    

    要运行所需的主进程参数,请执行以下操作:

     public static void main(String[] args) {
       for( int i = 2; i <= args.length; i++ ){
          int x = Integer.parseInt( args[i-2] );
          int y = Integer.parseInt( args[i-1] );
          Quadrant q = Quadrant.fromInts(x, y);
          System.out.println("( + x + "," + y + ") in " + q + " " + q.signPair());
       }
     }