一直试图找出如何仅添加相同数字的数据,以便它产生和输出像这样
总持续时间 调用 555-555-5555: 555-555-5555 持续时间:90s
调用 555-555-1234: 555-555-1234 持续时间:56s
调用 555-555-9876: 555-555-9876 持续时间:35秒
public class Activity0D {
public static void main(String[] args) {
String[] phoneNumbers = new String[100];
int[] callDurations = new int[phoneNumbers.length];
int size = 0;
size = addCall(phoneNumbers, callDurations, size, "555-555-5555", 40);
size = addCall(phoneNumbers, callDurations, size, "555-555-5555", 20);
size = addCall(phoneNumbers, callDurations, size, "555-555-5555", 30);
size = addCall(phoneNumbers, callDurations, size, "555-555-1234", 26);
size = addCall(phoneNumbers, callDurations, size, "555-555-1234", 30);
size = addCall(phoneNumbers, callDurations, size, "555-555-9876", 35);
System.out.println("Phone numbers (initially):");
printList(phoneNumbers, callDurations, size);
System.out.println("\nTotal Duration");
System.out.println("\nEnd of processing.");
}
public static void findAllCalls(String[] phoneNumbers, int[] callDurations, int size, String targetNumber)
{
int matchPos;
System.out.println("Calls from " + targetNumber + ":");
matchPos = find(phoneNumbers, size, 0, targetNumber);
while (matchPos >= 0) {
System.out.println(phoneNumbers[matchPos] + " duration: " + callDurations[matchPos] + "s");
// Find the next match, starting after the last one
matchPos = find(phoneNumbers, size, matchPos + 1, targetNumber);
}
}
public static void totalDurations(String[] phoneNumbers, int[] callDurations, int size)
{
int totalDuration = 0;
for (int i = 0; i < size; i++)
{
if(find(phoneNumbers, size, 0, "555-555-5555") >= 0)
{ //Add data the total duration for number "555-555-5555"
}
else if(find(phoneNumbers, size, 0, "555-555-1234") >= 0)
{ //Add data the total duration for number "555-555-1234"
}
else if(find(phoneNumbers, size, 0, "555-555-9876") >= 0)
{ //Add data the total duration for number "555-555-9876"
}
}
}
}
最佳答案
因此,如果您的电话号码格式正确匹配(并且没有一百万个号码需要检查 - 那么您应该使用数据库或购买足够的内存或其他东西;-)) 您可以使用哈希,因为它的访问时间为 O(1),请参阅 https://en.m.wikipedia.org/wiki/Big_O_notation
class Phones {
Map<String, Integer> phones;
int totals;
Phones() {
phones = new HashMap<String, Integer>();
totals = 0;
}
public void addCall(String number, int duration) {
int sumDuration = duration;
totals += duration;
if (phones.containsKey(number) {
sumDuration += phones.get(number).intValue();
}
phones.put(number, Integer.valueOf(sumDuration));
}
public Map<String, Integer>getPhones() {
return phones;
}
public int getTotals() {
return totals;
}
}
<小时/>
您可以像这样使用此类
void addPhones() {
Phones phones = new Phones();
phones.addCall("555-555-5555", 40);
phones.addCall("555-555-5555", 20);
phones.addCall("555-555-5555", 30);
phones.addCall("555-555-1234", 26);
...
例如phones.getPhones().get("555-555-1234")
您将获得一个号码的持续时间结果,并使用 phones.getTotals()
您可以立即获得总计。
关于java - 如何在并行数组中添加相似名称的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32545434/