Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/354.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 I';我在字符串数组中搜索大写字母最多的单词_Java_Arrays_String_Uppercase_Lowercase - Fatal编程技术网

Java I';我在字符串数组中搜索大写字母最多的单词

Java I';我在字符串数组中搜索大写字母最多的单词,java,arrays,string,uppercase,lowercase,Java,Arrays,String,Uppercase,Lowercase,我的数组包含3个元素,它们描述3个不同的“singer”,每个singer都有一个抽象的字符串方法,返回“Lyms”。歌词包含大写字母和小写字母,大写字母最多的歌手唱得最响亮。下面的方法需要比较这三位歌手和他们的歌词,唱得最响的(大写字母数最多)需要返回,如果有人知道如何解决这个问题,请帮助我。谢谢 public static String najglosniej(Spiewak[] sp) { return " "; } 我将向您解释两种方法,但不会为您编写代码。最基本的是

我的数组包含3个元素,它们描述3个不同的“singer”,每个singer都有一个抽象的字符串方法,返回“Lyms”。歌词包含大写字母和小写字母,大写字母最多的歌手唱得最响亮。下面的方法需要比较这三位歌手和他们的歌词,唱得最响的(大写字母数最多)需要返回,如果有人知道如何解决这个问题,请帮助我。谢谢

public static String najglosniej(Spiewak[] sp) {

        return " ";
}

我将向您解释两种方法,但不会为您编写代码。最基本的是使用命令式编程和循环。还可以将自定义函数与
max
一起使用

使用循环 强制获取具有最大计数的元素的主要思想是有一个循环,在该循环中,我们计算每个元素感兴趣的计数。对于当前最高的元素和当前最高的计数,我们还有一个存储变量。类似于
max\u count
max\u element
。这两种方法是耦合的(这就是为什么命令式方法不是最好的使用方法,而是我认为大多数初学者使用的方法;您很容易忘记更新这两种方法中的任何一种,并出现错误)

max\u count
保存我们在当前迭代中看到的最大计数,
max\u元素
是给我们提供当前最大值的对象。如果在一次迭代中,我们看到计数高于
max\u count
,我们将更新
max\u count
max\u element
,以便在所有即将到来的迭代中,我们知道当前最高的计数和元素

在循环结束时,
max\u元素
将成为结果

使用最大值 读取代码的更简洁的方法是使用带有自定义比较的
Collections.max
函数。通常情况下,一个人首先会学习使用内置比较来比较元素。就像对数字列表排序一样,使用的是数值。对字符串排序时,将使用字母表。但您也可以使用Java中的自定义比较器(例如,用于
排序
最大值
)。然后,这个自定义比较器检索两个要比较的元素。与依赖内置函数(在Java中,它将对象转换为字符串表示形式(
toString()
)并按字母顺序进行比较)不同,您只需使用一种方法将对象传递给它,该方法计算两个歌手的响度并比较数字,根据员工的工资进行比较。这与您的问题非常相似,只是您还需要计算大写字母的数量。

试试这个(如果我真的理解您的话):


我们不会为你做家庭作业。你自己甚至都没有尝试解决这个问题。非常感谢,我不是有意让任何人为我编写代码,我只是需要一些提示,我尝试了一些方法但没有成功,这就是为什么我发布了一个空方法,我知道规则,我不希望任何人为我编写整个代码,再次感谢你的回复,我一定会使用它们。如果你能理解,请使用
max
方法。代码更简洁,但我知道理解回调和其他东西需要一点时间。谢谢你的回复!我的做法有所不同,但这可能在将来的某个地方有所帮助:)
String[] test = new String[3];
        test[0] = "hello";
        test[1] = "WoRLD";
        test[2] = "WINNER";
        String result = getMaxCapitalLetters(test);
    }

    public String getMaxCapitalLetters(String[] strings){
        Pattern p = Pattern.compile("([A-Z])");
        String winner = null;
        int maxCount = Integer.MIN_VALUE;
        for(String input : strings){
            Matcher m = p.matcher(input);
            int count = 0;
            while(m.find()) {
                count++;
            }
            if (count > maxCount) {
                maxCount = count;
                winner = input;
            }
        }
        return winner;
    }