以下代码将重复名称分为1列,并将与名称关联的数字总和分隔到第二列。
喜欢:
Nokia 21
Blackberry 3
Nimbus 30
从程序中给出的数组。
我想知道包含这些条目的数组的最终长度。在这种情况下3.我如何计算?
package keylogger;
import java.util.ArrayList;
import java.util.List;
public class ArrayTester {
private static int finalLength = 0;
private static String Name[][];
private static String data[][] = {
{"Nokia" , "7"},
{"Blackberry" ,"1"},
{"Nimbus","10"},
{"Nokia" , "7"},
{"Blackberry" , "1"},
{"Nimbus","10"},
{"Nokia" , "7"},
{"Blackberry" , "1"},
{"Nimbus","10"}
};
public void calculator() {
Name = new String[data.length][2];
List<String> marked = new ArrayList<String>();
try {
for(int i=0;i<data.length;i++) {
Name[i][0] = data[i][0];
Name[i][1] = data[i][1];
String name = data[i][0];
if(marked.contains(name)) {
continue;
}
marked.add(name);
int k = i + 1;
int v = k;
for (int j = 0; j < data.length - v; j++) {
String s = data[k][0];
if(Name[i][0].equalsIgnoreCase(s)) {
Name[i][0] = s;
Integer z = Integer.parseInt(Name[i][1]) + Integer.parseInt(data[k][1]);
Name[i][1] = z.toString();
}
k++;
}
}
}catch(Exception exc) {
exc.printStackTrace();
}
}
public static void main(String args[]) {
ArrayTester o = new ArrayTester();
o.calculator();
for(String s[] : Name) {
for(String x : s) {
System.out.println(x);
}
}
}
}
答案 0 :(得分:2)
你不能先验地知道它,只要你完成分裂琴弦并进行数学运算,就会知道大小。
在你的示例中,marked.size()
将具有您要查找的大小,但我建议您直接使用HashMap,这样您就不会在线性时间内搜索现有元素,然后将其转换为数组。
类似的东西:
String[][] names = new String[map.size()];
Set<String> keys = map.keys();
int c = 0;
for (String k : keys)
{
names[c] = new String[2];
names[c][0] = k;
names[c++][1] = map.get(k).toString();
}
答案 1 :(得分:2)
据我了解,您想知道数组中不同名称的数量而不调用calculator()
,对吧?我真的不知道这是否有意义,因为你仍然必须通过每个条目并将其与一组进行比较。但你可以用Set:
private int getNumberOfEntries(String[][] data) {
Set<String> names = new HashSet<String>();
for (int i=0; i<data.length; i++) {
names.add(data[i][1]);
}
return names.size();
}
现在你可以拨打int n = getNumberOfEntries(data);
...
编辑:当然,在同一步骤中完成总和会更有意义,请参阅波希米亚人的解决方案。
答案 2 :(得分:2)
public static void main(String[] args) {
String data[][] = {{"Nokia", "7"}, {"Blackberry", "1"}, {"Nimbus", "10"},
{"Nokia", "7"}, {"Blackberry", "1"}, {"Nimbus", "10"}, {"Nokia", "7"},
{"Blackberry", "1"}, {"Nimbus", "10"}, {"Zebra", "78"}};
HashMap<String, Integer> totals = new HashMap<String, Integer>();
for (String[] datum : data)
totals.put(datum[0], new Integer(datum[1]) + (totals.containsKey(datum[0]) ? totals.get(datum[0]) : 0));
System.out.println("There are " + totals.size() + " brands: " + totals);
}
输出:
There are 4 brands: {Nimbus=30, Zebra=78, Nokia=21, Blackberry=3}