打印限制限制的所有可能组合

时间:2015-09-22 22:41:57

标签: java arrays multidimensional-array combinations

我有一组多维数组,包含食物和食物的价格。用户输入食物及其价格,这些都放在数组中。我知道数组已成功填充用户输入的内容,因为我已经通过打印出来测试了它。那段代码仍然在我的例子中,但可以忽略。但我需要做的是打印出有限金额的餐食组合,餐必须有1块肉,2个水果,3个蔬菜和1个面食。我无法弄清楚如何让它发挥作用。我知道我需要解析食物的价格才能用于数学。我感谢任何帮助。

    public static void fillarrays(){
    String meatarray [][] = {{meat1,meat2,meat3},{meatprice1,meatprice2,meatprice3}};
    String fruitarray [][] = {{fruit1,fruit2,fruit3,fruit4,fruit5,fruit6},{fruitprice1,fruitprice2,fruitprice3,fruitprice4,fruitprice5,fruitprice6}};
    String vegetablearray [][] = {{veg1,veg2,veg3,veg4,veg5,veg6,veg7,veg8},{vegprice1,vegprice2,vegprice3,vegprice4,vegprice5,vegprice6,vegprice7,vegprice8}};
    String pastaarray [][] = {{pasta1,pasta2,pasta3,pasta4},{pastaprice1,pastaprice2,pastaprice3,pastaprice4}};

    System.out.println("Meat");
    displayarray(meatarray);
    System.out.println("Fruit");
    displayarray(fruitarray);
    System.out.println("Vegetables");
    displayarray(vegetablearray);
    System.out.println("Pasta");
    displayarray(pastaarray);

}

public static void displayarray(String x[][]){
    for(int row=0; row<x.length; row++){
        for(int column=0; column<x[row].length; column++){
            System.out.print(x[row][column] + "\t\t" );
        }
        System.out.println();
    }
}

1 个答案:

答案 0 :(得分:0)

你可以这样做:

long maxPrice = // ...
for(int m = 0 ; m < meatarray[1].length ; ++m) {
  if(meatarray[1][m] <= maxPrice) {
    for(int f = 0 ; f < fruitarray[1].length ; ++f) {
      if(meatarray[1][m] + fruitarray[1][f] <= maxPrice) {
        for(int v = 0 ; v < vegetablearray[1].length ; ++v) {
          if(meatarray[1][m] + fruitarray[1][f] + vegetablearray[1][v] <= maxPrice) {
            for(int p = 0 ; v < pastaarray[1].length ; ++p) {
              if(meatarray[1][m] + fruitarray[1][f] + vegetablearray[1][v]
                 + pastaarray[1][p] <= maxPrice) {
                System.out.println(meatarray[0][m] + " " + fruitarray[0][f] + " "
                  + vegetablearray[0][v] + " " + pastaarray[0][p]);
              }
            }
          }
        }
      }
    }
  }
}