将2d数组的元素乘以另一个2d数组JAVA的元素的方法

时间:2014-02-04 05:06:41

标签: java arrays

我无法将2d字符串数组的元素乘以另一个字符串的元素。 下面是代码:

public static String updateString(String[][] array, String[] prices)
{
    String [][] newArray = new String[array.length][]; 
    for(int row = 0; row < prices.length; row++)
    {
        if (array[row][0].equals(prices[row]))
        {
            for(int i = 0; row <array.length; row++)
            {
                newArray[row][i+1] = array[row][i+1] * prices[i+1];
            }
        }
    }
}

以下是文件的样子:

array:
Omaha,104,1218,418,216,438,618,274,234,510,538,740,540
Saint Louis,72,1006,392,686,626,670,204,286,236,344,394,930
Des Moines,116,1226,476,330,444,464,366,230,602,260,518,692
Chicago,408,948,80,472,626,290,372,282,488,456,376,580
Kansas City,308,1210,450,234,616,414,500,330,486,214,638,586
Austin,500,812,226,470,388,488,512,254,210,388,738,686
Houston,454,1086,430,616,356,534,218,420,494,382,476,846
New Orleans,304,1278,352,598,288,228,532,418,314,496,616,882

prices array:
Omaha,7.5
Saint Louis,10.5
Des Moines,8.5
Chicago,11.5
Kansas City,12.5
Austin,10.75
Houston,12.5
New Orleans,9.25

如您所见,每个数组的第一列列出了城市,因此如果城市匹配,我需要第一个数组的元素乘以奥马哈(7.5)。

4 个答案:

答案 0 :(得分:1)

如果您别无选择,只能使用数字应该是最佳选择的字符串,那么尝试将字符串转换为这样的数字 -

String str = "22.43";
try{
    double str = Double.parseDouble(str);
}catch(NumberFormatException nfe){
    nfe.printStackTrace(); 
}

这只是一个例子。您可能希望看到使用打印堆栈跟踪的缺点 - Why is exception.printStackTrace() considered bad practice?

答案 1 :(得分:0)

尝试将值转换为整数或双精度类型。目前您正在尝试将字符串值相乘。

答案 2 :(得分:0)

你的内循环有两个问题。

1)你需要在某个时刻增加'i'。你需要在你的循环中:

i++;

目前,您正在遍历行而不是内循环中的列,摆脱:

row++;

2)你永远不会初始化newArray的列。由于您使用的是静态2D数组,因此此处显示的最大列数应为MAX_WIDTH。

String [][] newArray = new String[array.length][MAX_WIDTH];

正如其他人提到的那样,在对变量进行任何“数学运算”之前,你肯定需要从String转换为double。这里Java自动将Double(class)转换为double(数据结构)。

try {
    double val = Double.parseDouble(string);
} catch (NumberFormatException e) {
    e.printStackTrace();
}

答案 3 :(得分:0)

您正在乘以Strings,首先将它们转换为double,然后相乘 首先,当您返回2d数组时,您不会返回任何内容并将返回类型从String更改为String [] []

这是代码

public static String [][]updateString(String[][] array, String[] prices)
    {
        String [][] newArray = new String[array.length][]; 
        for(int row = 0; row < prices.length; row++)
        {
            if (array[row][0].equals(prices[row]))
            {
                for(int i = 0; i<array.length; i++)
                {
                    Double d=Double.parseDouble(array[row][i+1]) * Double.parseDouble(prices[i+1]);
                    newArray[row][i+1] = d.toString();
                }
            }
        }
        return newArray;
    }
}

你的内部循环应该像我在代码中所做的那样取决于你想要的东西