我无法将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)。
答案 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;
}
}
你的内部循环应该像我在代码中所做的那样取决于你想要的东西