最近我被要求进行一项任务,即编写一个简单的Java应用程序,将电话号码作为字符串读取,并打印出电话号码中每个数字的频率。然而,在与我的搭档仔细观察之后,我对于为什么需要第二个循环线感到困惑,代码如下:
public class CharacterFrequency {
public static Scanner kbd = new Scanner(System.in);
public static int MAXSIZE=10; //Constant for array size and easy change
public static void main(String[] args) {
int telephoneNumArrayIndex = 0; //index where array will start checking
char [] telephoneNumArray = new char[MAXSIZE]; //array holding tel Number digits.
String telephoneNumber;//string that will that will read input from user.
System.out.print("Please Enter a 10-digit Telephone Number: ");
telephoneNumber = kbd.next();
System.out.println("\nThe Following is the Number of Times Each Digit Appears:\n");
//loop that will check and test array for digits and ignore "white space"
//characters (-,*,., ,etc)
for (int i = 0; i < telephoneNumber.length(); i++) {
if (telephoneNumber.charAt(i) >= (char) 48
&& telephoneNumber.charAt(i) <= (char) 57) {
telephoneNumArray[telephoneNumArrayIndex++] = telephoneNumber.charAt(i);
}
}
//reasoning behind the loop. ??????
int[] counter = new int[MAXSIZE];
//loop to fill
for (int i = 0; i < counter.length; i++) {
counter[i] = 0;
System.out.println(counter[i]);
}
//loop that stores the frequency of each digit 0-9 to its corresponding array
//index. the char is then parsed to convert to int datatype in order to use the counter
//in the array.
for (int i = 0; i < telephoneNumArray.length; i++) {
for (int j = 0; j < 10; j++) {
if (telephoneNumArray[i] == (char) (j + 48)) {
counter[j]++;
}
}
}
//loop that will display the frequency (counter[i]) of each digit (i),
//used in a typical U.S. phone number by looping through each index of the array
//and printing the number corresponding to that count from 0-9
for (int i = 0; i < telephoneNumArray.length; i++) {
System.out.println(i + " - " + counter[i]);
}
}
}
结果是相同的两种方式,但是想知道是否可能更有效率?
答案 0 :(得分:0)
第二个循环的目的是将计数器数组中的所有值初始化为0。 但是在Java中,基元数组将每个元素初始化为其默认值。 int的默认值为0,因此计数器数组已将所有内容设置为0.因此该循环无意义且可以删除。
答案 1 :(得分:0)
有问题的循环用于初始化count数组中的值。许多语言中的未初始化变量为null
,如果您尝试计算增量(I.E.操作null +1
),您将获得异常,因为这不是受支持的操作。
这是一个有效的问题,也是在许多语言中进行这种循环(或其他初始化过程)的原因。但是在Java中并不需要它。在Java中,简单类型不能为null。这意味着,如果您没有初始化它们,则会转到默认值(0表示整数和短裤)。
请参阅this问题,以便对问题进行更深入的分析。