全新的Java,我似乎无法解决这个问题:
我要做的就是打印一个重复的字符串以及它在数组中显示的次数(不使用哈希表或类似的东西,只是非常简单)。
让我们说一个像这样的数组:
tempArray = {"dogs", "cats", "dogs", "dogs", "mice", "snakes", "cats"}
到目前为止,这是我的代码:
int flowerCount = 0;
for (int j = 0; j < tempArray.length - 1; j++) {
for (int k = j + 1; k < tempArray.length; k++) {
if( (tempArray[j].equals(tempArray[k])) && (j != k) ) {
System.out.println(tempArray[j]);
flowerCount++;
}
}
}
显然这不起作用,我在这里做错了什么?这看起来应该很简单,但是我无法获得嵌套循环和反右对齐。
答案 0 :(得分:1)
计算重复项的一种简单方法是尝试将它们添加到集合中。集合不允许重复,因此每次添加字符串失败时,都是因为字符串已经存在于集合中。
集合中的add()
方法返回一个布尔值,指示添加是否成功。如果您尝试添加的字符串已经在集合中,则添加将失败,并且该方法将返回false。
类似于:
HashSet<String> yourSet = new HashSet<>(); //Could be any kind of set, I'm just used to HashSets
int j = 0; j < tempArray.length - 1; j++) {
if (yourSet.add(tempArray[j]) {
//String was added succesfully, so it is not a duplicate.
} else {
//String is duplicate. Increment a duplicate counter for this string (and start at 2, if you want to include the initial occurence that is already in the set
}
}
答案 1 :(得分:1)
您可以使用Arrays.sort
对数组进行排序。这将使相等的元素彼此相邻。然后,您可以使用while循环遍历列表,查找相同的连续元素。
int i = 0;
while (i < arr.length) {
int start = i;
while (i < arr.length && arr[i].equals(arr[start])) {
++i;
}
int count = i - start;
System.out.println(arr[start] + " " + count);
}
答案 2 :(得分:1)
with array和for
String printed = "";
for(String auxOne : tempArray){
int CountRepeat = 0;
for(String auxTwo : tempArray){
if(auxOne.equals(auxTwo)){
CountRepeat++;
}
}
if(CountRepeat>1 && (printed.indexOf(auxOne)==-1)){
printed += auxOne;
System.out.println(auxOne + " : " + CountRepeat);
}
}
}