我有一个简单的问题。如何在Java中找到字符串中最常见的字符。我在逻辑上知道如何做,但我不确定我的语法是否正确:
public class HelloWorld {
public static void main(String[] args){
String votes = "ABBAB";
char[] StoringArray = votes.toCharArray();
int numOFB = 0;
int numOFA = 0;
if (StoringArray.contains("A")) {
numOFA++;
} else if (StoringArray.contains("B")) {
numOFAB++;
}
if (numOFA = numOFB) {
System.out.println("Tie");
} else if (numOFA > B) {
System.out.println("A");
} else {
System.out.println("B");
}
}
}
有人可以帮我解决如何在Java中正确执行此操作吗?
答案 0 :(得分:1)
你无法将char数组与字符串进行比较,下面的逻辑应该可以正常工作并为你提供所需的内容:
public static void main(String[] args){
String votes = "ABBAB";
char[] storingArray = votes.toCharArray();
int numOFB = 0;
int numOFA = 0;
for(char c : storingArray) {
if(c == 'A') {
numOFA++;
}
if(c == 'B') {
numOFB++;
}
}
if (numOFA == numOFB) {
System.out.println("Tie");
} else if (numOFA > numOFB) {
System.out.println("A");
} else {
System.out.println("B");
}
}
您的代码中有几处错误:
if (numOFA = numOFB)
它无效的表达式。您应该使用==
进行比较contains
方法进行比较。它应该在String
object 答案 1 :(得分:0)
正如评论所说;它看起来像是在计算A或B的数量,而不是最长的子串。你只是在分析一个由A和B组成的字符串吗?
另外,当你应该使用==时,你正在使用=来检查是否相等。我建议使用像Eclipse这样的IDE,它会在你这样做的时候告诉你。
编辑:同样,你没有循环遍历数组。您只是检查字符串是否包含A或B,如果包含,则添加1。你需要遍历整个数组。
答案 2 :(得分:0)
实际上,我正在使用它,我发现这是最好的方法:
String votes = "ABBAB";
char[] StoringArray = votes.toCharArray();
int B = 0;
int A = 0;
for (int i = 0; i < StoringArray.length; i ++) {
if (StoringArray[i] == 'A') {
A++;
} else if (StoringArray[i] == 'B') {
B++;
}
}
if (A == B) {
System.out.println("Tie");
} else if (A > B) {
System.out.println("A");
} else {
System.out.println("B");
}
答案 3 :(得分:0)
我会给你一个更抽象的解决方案:
public class Counter{
private char c;
private int count;
Counter(char c, int count){
this.c=c;
this.count=count;
}
public char getC() {
return c;
}
public void setC(char c) {
this.c = c;
}
public int getCount() {
return count;
}
public void addOcurrence() {
this.count++;
}
@Override
public boolean equals(Object obj) {
if(obj!=null)
if(((Counter)obj).getC()== this.c)
return true;
return false;
}
}
public static void main(String[] args){
String votes = "whateveryouwanttoputhereorcanbefromaparameter";
char[] storingArray = votes.toCharArray();
List<Counter> listCounter = new ArrayList<Counter>();
for(char aChar : storingArray){
Counter compareCounter = new Counter(aChar,1);
if(listCounter.contains(compareCounter)){
listCounter.get(listCounter.indexOf(compareCounter)).addOcurrence();
}else{
listCounter.add(compareCounter);
}
}
Counter max = listCounter.get(0);
for( Counter c : listCounter){
if(c.getCount() > max.getCount()){
max = c;
}
}
System.out.println("the character with more ocurrence is: "+max.getC());
}