我今天早些时候问过一个类似的问题,就是要找到通过文本扫描的数字中的一种数字(硬编码)。我考虑过是否要输入用户正在寻找的数字并开始研究。我可以找到很多“所有数字的查找频率”,但是没有关于用户输入的信息。我知道将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)。无法找出将整数和方法都输入到一个变量中的调用。
答案 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);
}