如何在Java中显示数组中最大相同的相邻元素
我是Java新手,我正在处理数组排序问题,这个问题我遇到了困难。搜索Simular或重复帖子,但似乎没有找到任何 问题是“在数组中找到最相同、相邻的元素并将它们写入新数组” 我的问题是。 如何在一个数组中存储来自另一个数组的大多数相邻元素? 这就是我到目前为止所做的如何在Java中显示数组中最大相同的相邻元素,java,arrays,loops,sorting,Java,Arrays,Loops,Sorting,我是Java新手,我正在处理数组排序问题,这个问题我遇到了困难。搜索Simular或重复帖子,但似乎没有找到任何 问题是“在数组中找到最相同、相邻的元素并将它们写入新数组” 我的问题是。 如何在一个数组中存储来自另一个数组的大多数相邻元素? 这就是我到目前为止所做的 int[] arr= {2, 1, 1, 3, 3, 2, 2, 2, 2, 1 ,1}; //test array int counter=0; int i = 0; int length = arr.length; int[]
int[] arr= {2, 1, 1, 3, 3, 2, 2, 2, 2, 1 ,1}; //test array
int counter=0;
int i = 0;
int length = arr.length;
int[] resultArr=new int[length];
for (i=1; i<length; i++)
{
if (arr[i-1]==arr[i])
{
counter++; // Counter to represent maximal adjacent occurred elem.
resultArr[i] = arr[i] //Writing elements in result array
}
}
System.out.println(counter);
System.out.println(resultArr);
我的输出是(直接从控制台)
1[I@6d06d69c您在代码中犯了两个错误,首先您对输入数组
arr
和结果数组resultar
使用了相同的索引i
,您应该像这样对resultar
使用不同的索引
int resultArrIndex = 0;
for (i=1; i<length; i++)
{
if (arr[i-1]==arr[i])
{
counter++; // Counter to represent maximal adjacent occurred elem.
resultArr[resultArrIndex] = arr[i] //Writing elements in result array
resultArrIndex++;
}
}
for (int i = 0; i < resultArr.length; i++) {
System.out.println(resultArr[i]); // will print each in a line
}
System.out.println(Arrays.toString(resultArr)); // Print all in one line
还是像这样
int resultArrIndex = 0;
for (i=1; i<length; i++)
{
if (arr[i-1]==arr[i])
{
counter++; // Counter to represent maximal adjacent occurred elem.
resultArr[resultArrIndex] = arr[i] //Writing elements in result array
resultArrIndex++;
}
}
for (int i = 0; i < resultArr.length; i++) {
System.out.println(resultArr[i]); // will print each in a line
}
System.out.println(Arrays.toString(resultArr)); // Print all in one line
将问题分解,首先是确定相邻值运行何时停止的方法
private static int runsTo(int[] vals, int index) {
for (int i = index; i < vals.length - 1; i++) {
if (vals[i] != vals[i + 1]) {
return i;
}
}
return vals.length;
}
哪个输出
[2, 1, 1, 3, 3, 2, 2, 2, 2, 1, 1]
Starting from 5 get 4
[2, 2, 2, 2]
1 Java数组不重写
toString()
,因此您将获得数组的哈希代码。以下是您的解决方案:
package com.sujit;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
public class Test {
public static int count = 0;
public static void main(String[] args) {
Integer[] arr= {2, 1, 1, 3, 3, 2, 2, 2, 2, 1 ,1}; //test array
List<Integer> resultList =Arrays.asList(arr);
List<Integer> maxOccurence = new ArrayList<Integer>();
Set<Integer> set = new HashSet<>();
for (Integer integer : resultList) {
set.add(integer);
}
for (Integer integer : set) {
int freq = Collections.frequency(resultList, integer);
maxOccurence.add(freq);
System.out.println("Element : "+integer+" Occurences= "+freq);
}
System.out.println(Collections.max(maxOccurence));
}
}
package com.sujit;
导入java.util.ArrayList;
导入java.util.array;
导入java.util.Collections;
导入java.util.HashSet;
导入java.util.List;
导入java.util.Set;
公开课考试{
公共静态整数计数=0;
公共静态void main(字符串[]args){
整数[]arr={2,1,1,3,3,2,2,2,1,1};//测试数组
List resultList=Arrays.asList(arr);
List maxOccurrence=new ArrayList();
Set=newhashset();
for(整数:结果列表){
set.add(整数);
}
for(整数:集){
int freq=Collections.frequency(结果列表,整数);
maxOccurence.add(频率);
System.out.println(“元素:“+integer+”出现次数=“+freq”);
}
System.out.println(Collections.max(maxoccurrence));
}
}
您的问题是什么?为什么会输出“[I@6d06d69c"或者其他什么?什么是maxcounter?您是否尝试过使用调试器逐行检查代码并了解自己做错了什么?正如@JBNizet提到的那样,使用调试器。学习使用调试器比键入和格式化帖子以及等待答复要省力。这听起来像Homeworks:D,如果是这样,您必须尝试解决这是你的self@EbrahimPoursadeqi不,一点也不。semmester在一个月前就为我结束了。我这样做是为了我自己。我正在读一本书,然后解决问题。哦,我看到我的输出是堆栈内存中数组的地址吗?@VeselinLalov it打印一个描述数组标识的字符串,在本例中是内存location,不是数组内容,请在这里检查更多巧合,但在我从中发现问题的那本书中,建议以类似的方式使用两个变量作为最大值,当前索引在哪里。谢谢。工作完美。