在电话号码中计算数字

3

我的任务是编写一个程序,计算电话号码(仅数字)中重复出现的数字次数。这是我目前为止的代码和输出结果。

import java.util.Scanner;

public class PhoneNumber {

  public static void main(String[] args) {         
    Scanner key= new Scanner(System.in);        
    String number;        
    int[] phoneArray = new int[10];      
    int one = 0;       
    System.out.println("Enter your phone number in the format (xxx)xxx-xxxx:");
    number = key.nextLine();        
    for(int i = 0; i < phoneArray.length; i++) {            
        System.out.println("Count of " + i + "'s: " + number.charAt(i));            
    }        
  }      
}

输出:

Enter your phone number in the format (xxx)xxx-xxxx:
(864)728-1638

Count of 0's: (
Count of 1's: 8
Count of 2's: 6
Count of 3's: 4
Count of 4's: )
Count of 5's: 7
Count of 6's: 2
Count of 7's: 8
Count of 8's: -
Count of 9's: 1

我不确定自己哪里做错了。


4
嗯,你实际上从未数过任何东西。phoneArray保持不变。 - 001
1
对于初学者来说,你似乎没有真正地数清楚数字。你遇到了什么具体的问题? - user3170251
你并没有在计数,你只是打印数组的前10个元素。首先循环数组,就像你现在正在做的那样,你可以有另一个数组来存储每个数字的所有出现次数,并根据循环中的当前数字,在计数数组中增加该位置的值。最后,只需要循环计数数组并显示存储的数字即可。 - Edu G
同样值得指出的是,charAt() 返回一个整数,它返回字符的 ASCII 代码,而不是像1、2、3等数字。ifc记得,数字‘1’的ASCII码为49。您需要将ASCII代码转换为所需的数字,并且还需要检查那些不是数字(如“)”和“-”)的代码。 - markspace
3个回答

3

您还没有统计每个数字出现的次数。按照您开始的方法,需要遍历字符串中的字符并增加数组的相关元素:

for (int i = 0; i < number.length(); ++i) {
    char digit = number.charAt(i);
    if (digit >= '0' && digit <= '9') {
         phoneArray[i - '0']++;
    }
}

2
为了提供一个“stream-api”解决方案,这里是使用Collectors.groupingBy的方法:
Map<Character, Long> charsGrouped = IntStream.range(0, str.length())
    .mapToObj(str::charAt)
    .collect(Collectors.groupingBy(Function.identity(), Collectors.counting()));

使用此解决方案,您只需迭代字符串并对每个字符进行分组,并计算它们出现的次数。从那里就很容易找到最常用的字符。

1
你可以通过从数字中删除该数字并将剩余字符串的长度减去原始字符串的长度来找到数字在数字中出现的次数。例如,如果(115)855-4732是电话号码,则其长度为13。要计算1的数量,您需要从数字中删除所有1,并得到(5)855-4732。现在,这个字符串的长度为11。通过将11从13中减去,您会得到1出现了2次。
for (int i = 0; i < 10; i++) {
    System.out.println("Count of " + i + "'s: " + (number.length() - number.replace("" + i, "").length()));
}

所以基本上,它考虑了字符串中的所有数字,并减去它没有关注的数字。例如,在(863)738-3762中,如果尝试找到存在的3的数量,它会执行“10-7”?正确吗? - Akarian Martin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接