Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/389.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用递归在char[]中查找后跟另一个特定字符的特定字符_Java_Arrays_Recursion_Char - Fatal编程技术网

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中,您永远不会将字符串与
    ==
    进行比较
  • 其次,您可以比较字符,而无需再次将其转换为字符串
公共静态整数计数(字符[]数字,整数索引){

试试这个,它就会运行