gpt4 book ai didi

java - 将数组中的元素向右移动,返回第二大元素,删除元素(java 开头)

转载 作者:太空宇宙 更新时间:2023-11-04 15:20:44 25 4
gpt4 key购买 nike

通过完成下面的 ArrayMethods 类,编写对整数数组执行以下任务的数组方法:

public class ArrayMethods {
private int[] values;
public ArrayMethods(int[] initialValues) { values = initialValues; }

public void shiftRight() {.......}
public int returnSecondLargest {......}
  • 将所有元素向右移动一位,并将最后一个元素移动到第一个位置。例如,1 4 9 16 25 将转换为 25 1 4 9 16
  • 返回数组中第二大的元素
  • 如果数组长度为奇数,则删除中间元素;如果长度为偶数,则删除中间两个元素

对于移位方法我有这样的:

public void shiftRight(){
for(int i=0; i<=values.length-1; i++){
if(i<values.length){
values[i]=values[i+1];
}
else if(i==values.length+1){
values[i]=values[0];
}
}

对于返回的第二大方法,我有这个:

public int returnSecondLargest(){
int temp;
for (int i = 0; i < values.length-1; i++) {
if(values[i] > values[i+1]){
temp = values[i];
values[i] =values[i + 1];
values[i+1] = temp;
}
}
return values[values.length - 2];
}

对于删除中间元素的方法,我有这个:

public void removeMiddleElement(){
int count = 0;
for(int i=0; i<values.length; i++){
count++;
if(count%2==0){
int middle1=count/2;
int middle2=(count/2)+1;
int[] copy = new int[values.length -1];
System.arraycopy(copy, 0, copy, 0, middle1);
System.arraycopy(copy, middle1+1, copy, middle1, copy.length-middle1-1);
System.arraycopy(copy, 0, copy, 0, middle2);
System.arraycopy(copy, middle2+1, copy, middle2, copy.length-middle2-1);
copy = values;
}
else if(count%2!=0){
int middle3=(int) ((count/2)+.5);
int[] copy = new int[values.length -1];
System.arraycopy(copy, 0, copy, 0, middle3);
System.arraycopy(copy, middle3+1, copy, middle3, copy.length-middle3-1);
copy = values;
}
}
}
}

在我的每个方法中,我都遇到了“越界”错误,或者它们似乎什么也没做,并返回原始数组,没有进行任何更改。如果您发现任何明显的错误或有任何建议,我们将不胜感激:) 谢谢!

编辑:removeMiddleElement 似乎没有执行任何操作,其他两种方法在显示 value[i+1] 的行给出越界错误

最佳答案

for the array must be sorted
public void shiftRight(){
int temp = values[values.length -1];
if(values.length >= 2)
{
System.arraycopy(values,0,values,1, values.length -1);
}
values[0] = temp;
}

第二个函数(数组也必须排序)

public int returnSecondLargest()
{
return values[values.length - 2];
}


public void removeMiddleElement()
{
int count = values.length ;
int[] copy;
if (count % 2 == 0)
{
int middle1 = count / 2;
int middle2 = (count / 2);
copy = new int[values.length - 2];
System.arraycopy(values, 0, copy, 0, middle1 - 1);
System.arraycopy(values, middle2 + 1 , copy, middle2 - 1, middle2 - 1);
}
else if (count % 2 != 0)
{
copy = new int[values.length - 1];
int middle1 = count / 2;
int middle2 = (count / 2);
System.arraycopy(values, 0, copy, 0, middle1);
System.arraycopy(values, middle2 +1, copy, middle2, (count / 2 ));
}
}

关于java - 将数组中的元素向右移动,返回第二大元素,删除元素(java 开头),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20415353/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com