如何在Java中显示数组中最大相同的相邻元素

如何在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[]

我是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[] 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,不是数组内容,请在这里检查更多巧合,但在我从中发现问题的那本书中,建议以类似的方式使用两个变量作为最大值,当前索引在哪里。谢谢。工作完美。