递归:扫描编号中的数字频率:redux

时间:2019-11-12 22:43:30

标签: java arrays recursion java.util.scanner

我今天早些时候问过一个类似的问题,就是要找到通过文本扫描的数字中的一种数字(硬编码)。我考虑过是否要输入用户正在寻找的数字并开始研究。我可以找到很多“所有数字的查找频率”,但是没有关于用户输入的信息。我知道将int转换为字符串并计算字符,但是我想找到另一种方式,希望使用递归。

我的主力已经固定(我相信):

Scanner scanner = new Scanner(new File("countdigits.txt"));
    int Number = 0;
    int[] digit = new int [10];
    digit[] = {0,1,2,3,4,5,6,7,8,9};
    int remainder = 0;
    while(scanner.hasNextInt())
    {
        Number = scanner.nextInt();
    }

    System.out.println("Okay, which number (0-9) would you like to find?");
    digit = input.nextInt();
    try {
        if (digit < 0 || digit > 9) throw new IOException();

} catch (IOException f) {
    System.out.println("Funny.  Exiting");
    int Count = count(Number);

    System.out.format("** Number of digits in given number = %d", Count);
}

已编辑以显示进度

private static int count(int number, int digit) {

return (number % 10 == digit ? 1 :0) + count(number / 10);
}

**我简化了返回以显示计数,但是现在我遇到了“实际和形式参数列表的长度不同”的错误(方法中为2 int,主体中为1)。无法找出将整数和方法都输入到一个变量中的调用。

1 个答案:

答案 0 :(得分:0)

我认为您根本不需要将文件中的输入转换为数字。您可以在字符串中扫描所需的字符。我也将其显示为递归函数。

public static void main(String... args) {

    Scanner input = new Scanner(System.in);
    try {
        Scanner scanner = new Scanner(new File("countdigits.txt"));
        while (scanner.hasNext()) {
            String word = scanner.next();

            System.out.println("Okay, which number (0-9) would you like to find?");
            String digitInput = input.next();
            if (digitInput.length() != 1) {
                throw new IOException("only a single digit is allowed");
            }
            char targetDigit = digitInput.charAt(0);
            if (targetDigit < '0' || targetDigit > '9') {
                throw new IOException("only numbers are allowed");
            }

            int count = count(word, targetDigit, 0);
            System.out.format("** Number of digits in given number = %d", count);
        }

    } catch (IOException f) {
        System.out.println("Funny.  Exiting");
    }
}

private static int count(String word, char targetDigit, int targetStart) {
    int targetLoc = word.indexOf(targetDigit, targetStart);
    if (targetLoc < 0) {
        return 0;
    }
    return 1 + count(word, targetDigit, targetLoc + 1);
}