我的数组包含3个元素,描述3个不同的歌手',每个歌手都有一个抽象的字符串方法,它返回歌词'。歌词包含小写和大写字母,拥有最多大写字母的歌手是唱得最响的歌手。下面的方法必须比较这三个歌手和他们的歌词,最响亮的(大写字母数量最多)需要返回,如果有人知道如何解决这个问题,请帮助我。谢谢!
public static String najglosniej(Spiewak[] sp) {
return " ";
}
答案 0 :(得分:0)
我将向您解释两种方法,但不会为您编写代码。最基本的是使用命令式编程和循环。也可以使用max
的自定义函数。
强制获取具有最大计数的元素的主要思想是有一个循环,在该循环中我们计算每个元素感兴趣的计数。我们还有一个存储变量用于当前最高元素和当前最高计数。像max_count
和max_element
之类的东西。这两个是耦合的(也就是说,为什么命令式方法不是最好的使用方法,但我认为大多数初学者使用的方法;你很容易忘记更新两者中的任何一个并且有错误。)
max_count
保存我们在当前迭代中看到的最大计数,max_element
该对象为我们提供了当前最大值。如果在一次迭代中,我们看到计数高于max_count
,我们同时更新max_count
和max_element
,以便在所有即将到来的迭代中我们知道当前最高的计数和元素。
在循环结束时,max_element
将成为结果。
阅读代码的一种更简洁的方法是使用Collections.max
函数进行自定义比较。通常,人们首先会学习比较元素与内置比较。就像对数字列表进行排序一样,正在使用数值。排序字符串时,使用字母表。但您也可以使用Java中的自定义比较器(例如sort
或max
)。然后,此自定义比较器检索要比较的两个元素。而不是依赖于内置函数(在Java中将对象转换为字符串表示形式(toString()
)并按字母顺序进行比较,我认为),您只使用一种计算响度的对象传递给它两位歌手都比较了这些数字。 See this example,员工按工资进行比较。它很像你的问题,只是你需要计算大写字母的数量。
答案 1 :(得分:0)
试试这个(如果我真的了解你):
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;
}