java - 这可以递归地完成吗?

标签 java arrays recursion

所以我和我的 friend 在我们还是 child 的时候就尝试编写这个小游戏,叫做 LOVERS.. 其中写下2个人的名字,全名,不含中间名,并数出名字中L、O、V、E、R、S的个数,相加后放在字母旁边。

示例:
姓名1:你好
名称2:关怀

长:2
奥:1
V:0
E: 2
R: 1
S: 0

之后您将把它们成对添加。

示例:
长:2 > 3 > 4 > 7 > 15 > 32
O:1 > 1 > 3 > 8 > 17
V:0 > 2 > 5 > 9
E: 2 > 3 > 4
R: 1 > 1
S: 0


事情是这样的...首先添加前 2 个字母的值...LO 然后 OV 然后 VE 等等。直到你在这种情况下得到一个最终答案 32....32 表示两个人彼此兼容的百分比。
我知道这很愚蠢。哈哈,但我们只是为了好玩而尝试编程。我们是菲律宾的信息技术二年级学生。无论如何,我们想知道是否有一种方法可以递归地进行计算,以及是否有一种方法可以减少使用的数组数量。
这是我们的代码:



import java.util.*;

public class LOVERS {


    static Scanner console = new Scanner(System.in);

    public static void main(String[] args) {
        String name1="";
        String name2="";
        char love[] = {'L','O','V','E','R','S'};
        int[] lovers = new int[6];
        int[] temp= new int[6];
        int[] temp2= new int[6];
        boolean done = true;
while(done){
        name1 = getName();
        name2 = getName();
        temp = getLetterCount(name1);
        temp2 = getLetterCount(name2);
        lovers = sumOfLetters(temp,temp2,love);
        System.out.println("");

        int[] firstLayer = new int[5];
        int[] secondLayer = new int[4];
        int[] thirdLayer = new int[3];
        int[] fourthLayer = new int[2];

        firstLayer = sums(lovers);
        secondLayer = sums(firstLayer);
        thirdLayer = sums(secondLayer);
        fourthLayer = sums(thirdLayer);
        int output = fourthLayer[0]+fourthLayer[1];
        if(output>100){
            output=100;
        }

        System.out.println("Result is : "+ output +"%");
        System.out.println("Do you want to try again? Y/N :");
        char again = ' ';
        if(again == 'n')
        {
            done = false;
        }
        else done = true;
}



    }

    public static int[] sums (int[] y){
        int[] x = new int[y.length-1];
        for(int ctr=1;ctr<y.length;ctr++){
            x[ctr-1]=y[ctr-1]+y[ctr];
        }
        return x;
    }

    public static String getName(){
        String n="";
        System.out.println("Enter name: ");
        n = console.nextLine();
        n = n.toUpperCase();
        return n;
    }

    public static int[] sumOfLetters(int[] temp, int[] temp2, char[] love){
        int[] lovers = new int[6];
        for(int ctr=0;ctr<6;ctr++){
            lovers[ctr]=temp[ctr]+temp2[ctr];
            System.out.println(love[ctr]+" - "+lovers[ctr]);
            }
        return lovers;
    }

    public static int[] getLetterCount(String n){
        int[] temp = new int[6];
        for(int x=0;x<n.length();x++){
                if(n.charAt(x)=='L'){
                    temp[0]++;
                }
                else if(n.charAt(x)=='O'){
                    temp[1]++;
                }
                else if(n.charAt(x)=='V'){
                    temp[2]++;
                }
                else if(n.charAt(x)=='E'){
                    temp[3]++;
                }
                else if(n.charAt(x)=='R'){
                    temp[4]++;
                }
                else if(n.charAt(x)=='S'){
                    temp[5]++;
                }
            }
        return temp;
    }
}

正如你所看到的,我们使用了4个数组来进行4层计算,并且我们使用了一个循环语句来进行计算。

那么这可以递归地完成吗?以及如何减少使用的数组数量?

这可以极大地帮助我们学习如何执行正确的递归函数,因为我们目前正在学习数据结构。希望你们能帮助我。谢谢

最佳答案

是的,当然你可以递归地编码。

首先,你的 sum-fn。您可以一遍又一遍地将字符串传递给同一个函数,而不是逐字节地遍历字符串,只需每次删除一个字符即可。该字符将添加到您的结果编号中。您的最终检查将是该字符串为空,然后返回 null。评估将返回递归,可能为字符串中的每个字符添加 1(或 0)。

为了使代码更清晰、更具可读性,您应该使用枚举而不是字节数组来存储整数。

此外,不要将其设置为静态函数,而是将其设置为可以访问属性的类。

对于6个字符的求和,每个级别对其进行相同的操作。因此,每个函数调用都应该执行加法并返回函数中再次调用的结果。您的最终检查是只有第一个整数值为正。如果所有其他值均为 0,则第一个值保存您的总和。

关于java - 这可以递归地完成吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6322164/

相关文章:

java - 不支持使用 JPA 更新查询的 DML 操作

c - 在 C 中取消引用包含指针的数组

php - mysql 子句中的逗号分隔字符串 IN 数组

python - 如何在具有有限元值的二维数组中查找缺失的组合/序列

Java如何迭代递归地查找链表中的值

Java - 通过给定的唯一索引号将一棵树附加到另一棵树的分支

java - java字符串中equals和compareto方法的区别

java 。我怎样才能提高性能?

java - 使用确认对话框将值从数据表传递到 bean JSF

javascript - 另一个 JavaScript 递归函数