我有点陷入困境,所以如果有人有空闲时间,那对我来说将是一个很大的帮助。我正在使用eclipse,程序正在编译和运行。但是存在运行时错误。 在数组中{2,1,1,2,3,3,2,2,2,1}我想打印{2,2,2},这是数组中重复次数最多的数字。我得到的是: 0 1 0 0 3 0 2 2 0
谢谢大家,这是我的代码。
public class SameIndexInArray
{
public static void main(String[] args)
{
int[] array = {2, 1, 1, 2, 3, 3, 2, 2, 2, 1};
int[] subarray = new int[array.length]; //store the values should be {2, 2, 2}
int max = 1;
int total = 1;
for(int i=0; i<array.length-1; i++)
{
if(array[i] != array[i + 1])
{
max = 1;
}
else if(array[i] == array[i + 1])
{
max++;
total = max;
subarray[i] = array[i]; // here is the issue
}
System.out.println(subarray[i]);
}
//System.out.println(total);
}
}
答案 0 :(得分:2)
你只是兼顾地存储到子阵列中,所以你应该为子阵列索引计数定义一个单独的计数器(比方说j),然后说子阵列[j ++] = array [i]。并且,您不应为每个数组索引输出子数组,因此将该println移动到第二个if子句中。
答案 1 :(得分:2)
看看是否有效
int[] array = {2, 1, 1, 2, 3, 3, 2, 2, 2, 1};
int frequency = 0;
int num = 0;
for(int i=0; i<array.length-1; i++)
{
int lfreq = 1;
int lnum = array[i];
while(array[i] == array[i+1]){
lfreq++;
i++;
}
if(lfreq >= frequency){
frequency = lfreq;
num = lnum;
}
}
int[] subarray = new int[frequency];
for(int i=0; i < frequency; i++)
subarray[i] = num;
System.out.println(Arrays.toString(subarray));
答案 2 :(得分:1)
你需要使用另一个索引但是“我” 您无法与具有相同索引的2个数组相关联
答案 3 :(得分:1)
你的问题是子阵列中的所有值都是用0初始化的,只有在存在实际序列时才编辑值,从第二个元素开始。
整个子阵列是不必要的。只需保存起始索引和子查询的长度;)
我的意思是这样的:
int[] array = {2, 1, 1, 2, 3, 3, 2, 2, 2, 1};
int startIndex = 0;
int length = 0;
int longestIndex = 0;
int longestLength = 0;
for(int i=0; i<array.length-1; i++)
{
if(array[i] != array[i + 1])
{
if (length > longestLength) {
longestLength = length;
longestIndex = startIndex;
}
startIndex = i;
length = 1;
}
else if(array[i] == array[i + 1])
{
length++;
}
}
if (length > longestLength) {
longestLength = length;
longestIndex = startIndex;
}
现在您知道最长序列的起始位置以及构建新阵列的时间长度:
int[] sequence = new int[longestLength];
for (int i = 0; i < longestLength; i++) {
sequence[i] = array[i + startIndex];
}
答案 4 :(得分:1)
那是因为你在索引位置“i”插入子阵列。 例如, 循环第二次运行。
array[1] == array[2]
为真,
subarray[i] = array[i];
运行。所以此时子阵列的内容是{0,1,0,0,0,0,0,0,0}。请注意,默认情况下,数组初始化为0。
这就是你能做到的。
int[] array = {2, 1, 1, 2, 3, 3, 2, 2, 2, 1};
//store the values should be {2, 2, 2}
int max = 1;
int total = 1;
int value = 0;
for(int i=0; i<array.length-1; i++)
{
if(array[i] != array[i + 1])
{
max = 1;
}
else if(array[i] == array[i + 1])
{
max++;
total = max;
value = array[i];
}
}
int[] subarray = new int[total];
for(int i=0; i<total; i++)
subarray[i] = value;
答案 5 :(得分:0)
public static void main(String [] args){
int[] ar = { 2, 1, 1, 2, 3, 3, 2, 2, 2, 1 };
int max=0,
maxStart=0,
count=1;
for(int i=1; i<ar.length; i++) {
if (ar[i-1] == ar[i]) {
count++;
if(count > max) {
max = count;
maxStart = i-count+1;
}
}else {
count=1;
}
}
System.out.println("Sub array begins from " + maxStart);
for(int i = maxStart; i < maxStart + max; i++) {
System.out.print(ar[i] + " ");
}
}