Java 使用递归在char[]中查找后跟另一个特定字符的特定字符
要返回字符数组中的次数,使用递归将字符“:”后跟字符“)”Java 使用递归在char[]中查找后跟另一个特定字符的特定字符,java,arrays,recursion,char,Java,Arrays,Recursion,Char,要返回字符数组中的次数,使用递归将字符“:”后跟字符“)” public class Recursion { public static int countSmiles(char[] numbers) { if (numbers.length == 0) return 0; if(String.valueOf(numbers[0])== ":" && String.valueOf(numbers[1])==")") return 1 + count
public class Recursion {
public static int countSmiles(char[] numbers) {
if (numbers.length == 0) return 0;
if(String.valueOf(numbers[0])== ":" && String.valueOf(numbers[1])==")") return 1 + countSmiles(numbers[1]);
return countSmiles(numbers[1]);
}
public static void main (String[] args) {
char[] s = {'n','g', ':' ,')', ':' ,')'};
System.out.println(countSmiles(s));
}
}
我预计结果是2
我能够使用字符串(见下文)成功地做到这一点,但无法使用char数组做到这一点
public static int countSmiles(String numbers) {
if (numbers.length() == 0) return 0;
if (numbers.charAt(0) == ':'&& numbers.charAt(1)==')') return 1 + countSmiles(numbers.substring(1));
return countSmiles(numbers.substring(1));
}
numbers[1]
将获得第二个字符,编译器将告诉您参数不正确,因为需要一个chars[]
,而您只需给它char
。您需要执行子数组Arrays.copyOfRange并将其传递到countSmiles
return countSmiles(Arrays.copyOfRange(numbers, 1, numbers.length - 1));
但是,对于更多的元素,您需要保留到目前为止跳过了多少个元素的计数器,并使用它而不是1。
numbers[1]
将获得第二个字符,编译器将告诉您参数不正确,因为需要一个chars[]
,您只需给它char
。您需要执行子数组Arrays.copyOfRange并将其传递到countSmiles
return countSmiles(Arrays.copyOfRange(numbers, 1, numbers.length - 1));
但是,对于更多的元素,您需要保留到目前为止跳过了多少个元素的计数器,并使用它而不是1。
numbers[1]
只是一个字符,而不是没有第一个字符的整个数组。要实现这一点,可以使用数组。copyOfRange(numbers,1,numbers.length)numbers[1]
只是一个字符,而不是整个数组没有第一个字符。要实现这一点,您可以使用Arrays.copyOfRange(numbers,1,numbers.length)
除了人们所说的Arrays.copyOfRange()
之外,还需要使用String.equals()
来实现相等
工作代码:
import java.util.Arrays;
public class Main {
public static int countSmiles(char[] numbers) {
if (numbers.length == 0) return 0;
if(String.valueOf(numbers[0]).equals(":") && String.valueOf(numbers[1]).equals(")")) {
return 1 + countSmiles(Arrays.copyOfRange(numbers, 1, numbers.length));
}
return countSmiles(Arrays.copyOfRange(numbers, 1, numbers.length));
}
public static void main (String[] args) {
char[] s = {'n','g', ':' ,')', ':' ,')'};
System.out.println(countSmiles(s));
}
}
除了人们所说的
Arrays.copyOfRange()
,您还需要使用String.equals()
而不是=
实现相等
工作代码:
import java.util.Arrays;
public class Main {
public static int countSmiles(char[] numbers) {
if (numbers.length == 0) return 0;
if(String.valueOf(numbers[0]).equals(":") && String.valueOf(numbers[1]).equals(")")) {
return 1 + countSmiles(Arrays.copyOfRange(numbers, 1, numbers.length));
}
return countSmiles(Arrays.copyOfRange(numbers, 1, numbers.length));
}
public static void main (String[] args) {
char[] s = {'n','g', ':' ,')', ':' ,')'};
System.out.println(countSmiles(s));
}
}
首先,递归永远不会移动
- 在没有指针的情况下,如何扫描所有数组
- 在java中,您永远不会将字符串与
进行比较==
- 其次,您可以比较字符,而无需再次将其转换为字符串
试试这个,它就会运行。首先,你的递归永远不会移动
- 在没有指针的情况下,如何扫描所有数组
- 在java中,您永远不会将字符串与
进行比较==
- 其次,您可以比较字符,而无需再次将其转换为字符串