当前位置: 首页 > 知识库问答 >
问题:

递归-布尔条件和char数组

丌官运珧
2023-03-14

我在这个递归练习中遇到了一个问题。

练习是测试字符数组是否只有大写或小写,然后才返回true;否则,如果同时存在小写和大写字母,则返回false。

下面的代码总是返回true。

我试着在每次有大信号或小信号时都计算一个变量,然后如果数量等于数组,那么它是真的,否则它不是真的;但它没有给我这个。这是一个布尔函数,调用递归并没有给出变量的数量。

守则:

public static boolean Arr(char[] arr, int length) {
    if (length == -1)
        return true;
    boolean flag = Character.isUpperCase(arr[length]);

    if (flag)
        return true;

    return Arr(arr, length - 1);
}

共有3个答案

袁泰
2023-03-14

这能满足你的需要吗?

public前端只接受一个字符数组,并使用终端用户不必担心的参数的起始值调用private后端。

public static boolean sameCase(char[] ary) {
    return sameCase(ary, 0, ary.length - 1);
}

后端试图将阵列的当前段分成两个子段,将问题减半,使堆栈的增长率保持为O(log#chars),而不是O(#chars)。如果当前段少于两个字符,则所有字符的大小写基本相同。否则,请检查每个子段是否具有大小写相同的字符,如果是,请使用XOR和技巧检查两个子段的大小写是否相同。

private static boolean sameCase(char [] ary, int first, int last) {
    int len = last - first + 1;
    int mid = first + len / 2;
    return len < 2 ||
      (sameCase(ary, first, mid - 1) && sameCase(ary, mid, last) &&
      (Character.isUpperCase(ary[first]) ^ Character.isLowerCase(ary[last])));
}

注意,通过对递归调用进行ANDing,逻辑短路平均加快了速度。

郭永安
2023-03-14

看看这是否有效

public static boolean Arr(char[] arr, int length) {
    if (length == -1)
        return true;
    boolean flag = Character.isUpperCase(arr[length]);

    if (flag)
        return Arr(arr, length - 1);
    else 
        return false;
}
燕英奕
2023-03-14

您需要函数中的附加参数和附加退出条件:

  • 附加参数:上次读取的字符为小写或大写
  • 要退出的附加测试:如果当前字符与最后一个字符的退出情况不同,则返回false

第二种方法不是从第一个字符开始,而是从第二个字符开始,检查当前字符和先前字符之间是否有相同的大小写。

 类似资料:
  • 我有一个数组,如果两个相邻的数被10除,它将返回true。现在它的回报总是假的。

  • 这就是我正在研究的问题:“给定一个整数数组,是否可以选择一个整数组,使得这个组和给定的目标有这些附加的约束条件:数组中所有5的倍数都必须包含在组中。如果紧接在5倍数后面的值是1,就不能选择它。(不需要循环。)” 我尝试了以下操作: 但它只得到5的倍数,我试过: 但它不起作用,因为有时5的倍数不包括在内。 我知道我的代码还没有完成第二个约束。 有什么想法吗?

  • 这个页面的操作符可用于根据条件发射或变换Observables,或者对它们做布尔运算: 条件操作符 amb( ) — 给定多个Observable,只让第一个发射数据的Observable发射全部数据 defaultIfEmpty( ) — 发射来自原始Observable的数据,如果原始Observable没有发射数据,就发射一个默认数据 (rxjava-computation-expressi

  • 我想写返回true的Python函数一个字符串s是回文,也就是等于它的反。例如,“赛车”和“abba”是回文。到目前为止,这是我不成功的尝试。 当我告诉我的函数返回相反的结果时,我没有问题,但是,我不知道应该如何进行比较才能返回一个布尔值。 使用上面的函数会产生以下错误 现在我完全理解为什么会产生上述错误。这是因为一些递归函数返回一个boool并尝试将其添加到字符串中;但是我做不到的是如何避免这个

  • 这章的中心话题是能够根据程序的状态执行不同命令的if语句。但是首先我想介绍两个新的运算符 : 地板除(floor division)和求余(modulus)。 地板除和求余 地板除 运算符(floor division operator) // 先做除法,然后将结果保留到整数。例如,如果一部电影时长105 分钟,你可能想知道这代表着多少小时。传统的除法操作会返回一个浮点数: >>> minutes