【问题标题】:Counting digits in a phone number计算电话号码中的数字
【发布时间】:2018-10-15 17:01:18
【问题描述】:

我的任务是编写一个程序来计算一个数字在电话号码中重复的次数(仅限数字)。这就是我目前所拥有的及其输出。

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

我不确定自己做错了什么。

【问题讨论】:

  • 嗯,你从来没有真正计算过任何东西。 phoneArray 保持不变。
  • 对于初学者来说,您似乎并没有真正计算数字。您遇到了什么具体问题?
  • 你没有计算任何东西,你只是打印数组的前 10 个元素,开始循环数组,就像你正在做的那样,你可以有另一个数组来存储所有出现的每个数字,并根据循环中的当前数字,您只需在该位置增加计数数组,最后您只需要循环计数数组并显示存储的数字
  • 同样重要的是要指出 charAt() 返回一个 int,它返回字符的 ASCII 码,而不是像 1、2、3 等这样的数字。@987654325 的 ASCII 码@ 是 49 iirc。您必须将 ASCII 代码转换为您想要的数字,并且您还必须检查不是数字的代码(例如 )(-)。

标签: java string digits


【解决方案1】:

您还没有计算每个数字出现的次数。采用您开始的方法,您需要遍历字符串字符并递增数组的相关元素:

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()));
    

    通过使用此解决方案,您只需遍历字符串并将每个字符分组并计算它们出现的次数。从那里很容易找到最常用的字符。

    【讨论】:

      【解决方案3】:

      您可以通过从数字中删除该数字并从原始字符串的长度中减去剩余字符串的长度来找到该数字中某个数字的出现次数。
      编辑
      因此,如果 (115)855-4732 是电话号码,它的长度是 13。要计算 1,您从号码中删除所有 1 并得到 (5)855-4732。现在这个字符串的长度为 11。通过从 13 中减去 11,您会得到 2 个 1。

      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”吗?对吗?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-03
      • 2016-03-21
      • 1970-01-01
      • 2011-12-16
      相关资源
      最近更新 更多