Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/317.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
多维数组:Java_Java_Arrays_Multidimensional Array - Fatal编程技术网

多维数组:Java

多维数组:Java,java,arrays,multidimensional-array,Java,Arrays,Multidimensional Array,我正在开发一个税务计算器,我的想法是将税务括号放入多维数组中。这是我第一次尝试这样的事情,我想知道这样做是否正确 private static double[][][] taxBrackets; static { taxBrackets = new double[20][14][14]; /*Single*/ /*Married*/ /*Head of Household*/ //

我正在开发一个税务计算器,我的想法是将税务括号放入多维数组中。这是我第一次尝试这样的事情,我想知道这样做是否正确

private static double[][][] taxBrackets;

static {
    taxBrackets = new double[20][14][14];
/*Single*/                           /*Married*/                        /*Head of Household*/
    //TierOne                           //TierOne                           //TierOne
    taxBrackets[0][0][0] = 0;           taxBrackets[0][1][0] = 0;           taxBrackets[0][0][1] = 0;       //MIN
    taxBrackets[1][0][0] = 9075;        taxBrackets[0][2][0] = 18150;       taxBrackets[0][0][2] = 12950;   //MAX
    taxBrackets[2][0][0] = 0.10;                                                                         //Tax Rate
    //TierTwo
    taxBrackets[3][0][0] = 9076;        taxBrackets[0][3][0] = 18151;       taxBrackets[0][0][3] = 12951;   //MIN
    taxBrackets[4][0][0] = 36900;       taxBrackets[0][4][0] = 73800;       taxBrackets[0][0][4] = 49400;   //MAX
    taxBrackets[5][0][0] = 0.15;                                                                         //Tax Rate
    //TierThree
    taxBrackets[6][0][0] = 36901;       taxBrackets[0][5][0] = 73801;       taxBrackets[0][0][5] = 49401;   //MIN
    taxBrackets[7][0][0] = 89350;       taxBrackets[0][6][0] = 148850;      taxBrackets[0][0][6] = 127550;  //MAX
    taxBrackets[8][0][0] = 0.25;                                                                         //Tax Rate
    //TierFour
    taxBrackets[9][0][0] = 89351;       taxBrackets[0][7][0] = 148851;      taxBrackets[0][0][7] = 127551;  //MIN
    taxBrackets[10][0][0] = 186350;     taxBrackets[0][8][0] = 226850;      taxBrackets[0][0][8] = 206600;  //MAX
    taxBrackets[11][0][0] = 0.28;                                                                        //Tax Rate
    //TierFive
    taxBrackets[12][0][0] = 186351;     taxBrackets[0][9][0] = 226851;      taxBrackets[0][0][9] = 206601;  //MIN
    taxBrackets[13][0][0] = 405100;     taxBrackets[0][10][0] = 405100;     taxBrackets[0][0][10] = 405100; //MAX
    taxBrackets[14][0][0] = 0.33;                                                                        //Tax Rate
    //TierSix
    taxBrackets[15][0][0] = 405101;     taxBrackets[0][11][0] = 405101;     taxBrackets[0][0][11] = 405101; //MIN
    taxBrackets[16][0][0] = 406750;     taxBrackets[0][12][0] = 457600;     taxBrackets[0][0][12] = 432200; //MAX
    taxBrackets[17][0][0] = 0.35;                                                                        //Tax Rate
    //TierSeven
    taxBrackets[18][0][0] = 406751;      taxBrackets[0][13][0] = 457601;     taxBrackets[0][0][13] = 432201; //MIN
    taxBrackets[19][0][0] = 0.396;                                                                       //Tax Rate
}
这个想法是让左撇子中有一个人,中间有结婚的人,在右边排列的户主。我这样做是正确的还是完全没有抓住要点

更新:2017年1月30日 在遵循Nhouser9的建议之后,我最终得到了更易于管理的结果

private static class TaxBracket {

    final double minSalary;
    final double maxSalary;
    final double taxRate;

    TaxBracket(double minSalary, double maxSalary, double taxRate) {
        this.minSalary = minSalary;
        this.maxSalary = maxSalary;
        this.taxRate = taxRate;
    }
}
//This is the data structure which holds the values for each tier of each filing status
//Changing values in these arrays will affect the output of the entire program
private static TaxBracket[] singleFiler;
static {
    singleFiler = new TaxBracket[]
        {
            new TaxBracket(0, 9075, 0.10),      //Index 0 TierOne
            new TaxBracket(9076, 36900, 0.15),  //Index 1 TierTwo
            new TaxBracket(36901, 89350, 0.25), //Index 2 TierThree
            new TaxBracket(89351, 186350, 0.28),//Index 3 TierFour
            new TaxBracket(186351, 405100, 0.33),//Index 4 TierFive
            new TaxBracket(405101, 406750, 0.35),//Index 5 TierSix
            new TaxBracket(406751, Double.MAX_VALUE, 0.396)//Index 6 TierSeven
        };
}
private static TaxBracket[] jointFiler;
static {
    jointFiler = new TaxBracket[]
        {
            new TaxBracket(0, 18150, 0.10),      //Index 0 TierOne
            new TaxBracket(18151, 73800, 0.15),  //Index 1 TierTow
            new TaxBracket(73801, 148850, 0.25), //Index 2 TierThree
            new TaxBracket(148851, 226850, 0.28),//Index 3 TierFour
            new TaxBracket(226851, 405100, 0.33),//Index 4 TierFive
            new TaxBracket(405101, 457600, 0.35),//Index 5 TierSix
            new TaxBracket(457601, Double.MAX_VALUE, 0.396)//Index 6 TierSeven
        };
}
private static TaxBracket[] hohFiler;
static {
    hohFiler = new TaxBracket[]
        {
            new TaxBracket(0, 12950, 0.10),      //Index 0 TierOne
            new TaxBracket(12951, 49400, 0.15),  //Index 1 TierTow
            new TaxBracket(49401, 127550, 0.25), //Index 2 TierThree
            new TaxBracket(127551, 206600, 0.28),//Index 3 TierFour
            new TaxBracket(206601, 405100, 0.33),//Index 4 TierFive
            new TaxBracket(405101, 432200, 0.35),//Index 5 TierSix
            new TaxBracket(432201, Double.MAX_VALUE, 0.396)//Index 6 TierSeven
        };
}

不,这不是最好的办法。 我将为单身、已婚和户主实施三个课程

每个类都将实现一个接口,例如,TaxTiers

在单身、已婚和户主类中,您可以有3个数组或列表:tierMins、tierMaxs和tierRates。 然后你就写:

public double getRateForTier(int tier) {
  return tierRates.get(tier);
}

不,这不是最好的办法。 我将为单身、已婚和户主实施三个课程

每个类都将实现一个接口,例如,TaxTiers

在单身、已婚和户主类中,您可以有3个数组或列表:tierMins、tierMaxs和tierRates。 然后你就写:

public double getRateForTier(int tier) {
  return tierRates.get(tier);
}

我更愿意为税级创建一个类,它包含Single、已婚、HeadOfHousehold和所有其他属性。然后,启动该类实例的一维数组。例如:

class TaxBracket{
    double single;
    double married;
    double headOfHousehold;

    .... // any other attributes + getters and setters! 

}
在主类中,定义数组:

TaxBracket []taxBrackets = new TaxBracket[20];

我更愿意为税级创建一个类,它包含Single、已婚、HeadOfHousehold和所有其他属性。然后,启动该类实例的一维数组。例如:

class TaxBracket{
    double single;
    double married;
    double headOfHousehold;

    .... // any other attributes + getters and setters! 

}
在主类中,定义数组:

TaxBracket []taxBrackets = new TaxBracket[20];

这是一种可能的解决办法。如果行得通,没关系

因为Java是一种面向对象的语言,所以最好使用对象。例如,TaxBracket对象如下所示:

public class TaxBracket {
    public static final int SINGLE = 1;
    public static final int MARRIED = 2;
    public static final int HEAD_OF_HOUSE = 3;

    public final int mStatus;
    public final int minSalary;
    public final int maxSalary;
    public final double rate;

    public TaxBracket(int mStatus, int minSalary, int maxSalary, double rate) {
        this.mStatus = mStatus;
        this.minSalary = minSalary;
        this.maxSalary = maxSalary;
        this.taxRate = taxRate;
    }
}
taxBrackets[0] = new TaxBracket(TaxBracket.SINGLE, 0, 9075, .1);
然后,您可以声明这些对象的单个数组,而不是多维数组,将其初始化如下:

public class TaxBracket {
    public static final int SINGLE = 1;
    public static final int MARRIED = 2;
    public static final int HEAD_OF_HOUSE = 3;

    public final int mStatus;
    public final int minSalary;
    public final int maxSalary;
    public final double rate;

    public TaxBracket(int mStatus, int minSalary, int maxSalary, double rate) {
        this.mStatus = mStatus;
        this.minSalary = minSalary;
        this.maxSalary = maxSalary;
        this.taxRate = taxRate;
    }
}
taxBrackets[0] = new TaxBracket(TaxBracket.SINGLE, 0, 9075, .1);

这是一种可能的解决办法。如果行得通,没关系

因为Java是一种面向对象的语言,所以最好使用对象。例如,TaxBracket对象如下所示:

public class TaxBracket {
    public static final int SINGLE = 1;
    public static final int MARRIED = 2;
    public static final int HEAD_OF_HOUSE = 3;

    public final int mStatus;
    public final int minSalary;
    public final int maxSalary;
    public final double rate;

    public TaxBracket(int mStatus, int minSalary, int maxSalary, double rate) {
        this.mStatus = mStatus;
        this.minSalary = minSalary;
        this.maxSalary = maxSalary;
        this.taxRate = taxRate;
    }
}
taxBrackets[0] = new TaxBracket(TaxBracket.SINGLE, 0, 9075, .1);
然后,您可以声明这些对象的单个数组,而不是多维数组,将其初始化如下:

public class TaxBracket {
    public static final int SINGLE = 1;
    public static final int MARRIED = 2;
    public static final int HEAD_OF_HOUSE = 3;

    public final int mStatus;
    public final int minSalary;
    public final int maxSalary;
    public final double rate;

    public TaxBracket(int mStatus, int minSalary, int maxSalary, double rate) {
        this.mStatus = mStatus;
        this.minSalary = minSalary;
        this.maxSalary = maxSalary;
        this.taxRate = taxRate;
    }
}
taxBrackets[0] = new TaxBracket(TaxBracket.SINGLE, 0, 9075, .1);

这看起来非常复杂和不可读-为什么不定义一个简单的方法,使用2或3个参数并输出正确的税率?由于我对税收没有太多的概念,我不知道该方法应该采用什么参数,但将它们放在一个数据结构中似乎非常奇怪和错误。请注意:在编写代码之前,您最好使用codereview.stackexchange。com@GhostCat谢谢你的提示,我会检查一下。这看起来非常复杂和不可读-为什么不定义一个简单的方法,使用2或3个参数并输出正确的税率?由于我对税收没有太多的概念,我不知道该方法应该采用什么参数,但将它们放在一个数据结构中似乎非常奇怪和错误。请注意:在编写代码之前,您最好使用codereview.stackexchange。com@GhostCat谢谢你的提示,我会检查它。我在代码后面会这样做,但我只是想找到一种存储值的好方法,使以后的更新和维护变得容易。@Gabriel如果你想让更新和维护变得容易,第一次就用正确的方法。这就是如何让它保持可维护性,而不是通过实施计划稍后修复的黑客攻击。这就是为什么会出现如此多的可维护性问题。@nhouser9我完全同意,这就是为什么我想发布这篇文章,以便我可以学习正确的方法。我是一名学生,对Java非常陌生。请记住:这种代码的问题是您将开始复制switch语句。这很糟糕。相反:您希望有一个返回某个接口实例的工厂;工厂在一个地方进行切换。@GhostCat,同意重复切换语句。有什么想法吗?我在代码后面会这样做,但我只是想找到一种存储值的好方法,使以后的更新和维护变得容易。@Gabriel如果你想让更新和维护变得容易,第一次就用正确的方法。这就是如何让它保持可维护性,而不是通过实施计划稍后修复的黑客攻击。这就是为什么会出现如此多的可维护性问题。@nhouser9我完全同意,这就是为什么我想发布这篇文章,以便我可以学习正确的方法。我是一名学生,对Java非常陌生。请记住:这种代码的问题是您将开始复制switch语句。这很糟糕。相反:您希望有一个返回某个接口实例的工厂;工厂在一个地方做开关。@Gh
ostCat,同意开关语句的副本。有什么想法吗?为什么不列个清单呢?List Tax括号=新的ArrayList;tax括号。添加新的tax括号。。。;为什么不列一份清单呢?List Tax括号=新的ArrayList;tax括号。添加新的tax括号@我喜欢这个,它比我拥有的更有意义。谢谢你的反馈。我将努力实现这一点,并让你知道它是如何进行的。@Gabriel很乐意帮助你!让我们知道它是如何运行的,如果它解决了您的问题,请记住将其标记为已接受的答案=]@nhouser9使其工作正常。我真的很感谢你的帮助。@nhouser9我喜欢这个,它比我所拥有的更有意义。谢谢你的反馈。我将努力实现这一点,并让你知道它是如何进行的。@Gabriel很乐意帮助你!让我们知道它是如何运行的,如果它解决了您的问题,请记住将其标记为已接受的答案=]@nhouser9使其工作正常。我真的很感谢你的帮助。