Java 交换数组中的元素

Java 交换数组中的元素,java,arrays,indexing,swap,Java,Arrays,Indexing,Swap,我一直在努力解决这个问题: 假设我有一个数组: int[] n = {0, 0, -1, 1, 0, 1, 1, -1, 1}; 我需要能够对数组进行排序,如果数组前面有一个非零的零,那么它们应该被交换 例如:0,0,-1,1,0,1,1,-1,1 将变成:0,0,-1,0,1,1,1,-1,1 我一直在尝试使用for循环和if语句来实现这一点,但运气不佳。有什么建议吗?试试这个: for (int i = 1 ; i < n.length ; i++) if (n[i] ==

我一直在努力解决这个问题:

假设我有一个数组:

int[] n = {0, 0, -1, 1, 0, 1, 1, -1, 1};
我需要能够对数组进行排序,如果数组前面有一个非零的零,那么它们应该被交换

例如:
0,0,-1,1,0,1,1,-1,1

将变成:
0,0,-1,0,1,1,1,-1,1

我一直在尝试使用
for
循环和
if
语句来实现这一点,但运气不佳。有什么建议吗?

试试这个:

for (int i = 1 ; i < n.length ; i++)
    if (n[i] == 0 && n[i - 1] != 0) {
        int tmp = n[i - 1];
        n[i - 1] = n[i];
        n[i] = tmp;
    }
for(int i=1;i

您认为需要一个
for
循环,循环体中有
if
语句,这是对的。我们在这里所做的就是从元素1开始循环数组。然后检查当前所在的元素是否为
0
,前一个元素是否为
0
:即如果(n[i]==0&&n[i-1]!=0)
。如果这个条件为真,我们交换这两个元素

如果不使用位旋转,您将需要一个临时变量来交换两个对象。例如:

int[] n = {...};
int temp = n[3]; // swaps n[3] and n[4]
n[3] = n[4];
n[4] = temp;
您可以在循环中粘贴类似的内容来完成所描述的内容。

for(int i=0;ifor(int i=0; i < length; i++)
{
    if(i > 0 && arr[i] == 0 && arr[i-1] != 0)
    {
        int temp = arr[i-1];
        arr[i-1] = arr[i];
        arr[i] = temp;
    }
}
{ 如果(i>0&&arr[i]==0&&arr[i-1]!=0) { 内部温度=arr[i-1]; arr[i-1]=arr[i]; arr[i]=温度; } } 应该可以用。

公共类Swaparray
public class Swaparray 
{
     public static void main(String []args)
     {
        int [] arr={0,1,2,3,4,5,6,7};
         Swaparray.displayArray(arr);
         for(int i=1;i<arr.length;i++)
         {
         while(arr[i]%2!=0)
         {
        int tmp = arr[i - 1];
        arr[i - 1] = arr[i];
        arr[i] = tmp;
        }
        }
        Swaparray.displayArray(arr);
                     }
   static void displayArray(int[]arr)
   {
       System.out.print("Array elements are: ");
       for(int i=0;i<arr.length;i++) {
           System.out.print(arr[i]+" "); }
       System.out.println();
       }
}
{ 公共静态void main(字符串[]args) { int[]arr={0,1,2,3,4,5,6,7}; Swaparray.displayArray(arr); 对于(inti=1;i
intarr[]={1,2,3,4,5,6,7,8,9};
int-length=arr.length;
内部温度;
对于(int i=0;i
“有什么提示吗?”
:是的——请。否则我们怎么才能猜出你可能做错了什么?否则我们怎么才能知道你可能有哪些需要澄清的误解?太好了。喂食者来了。为什么不先等一下,直到我们看到OP首先尝试了什么?他们不完全是喂食。我的问题不是我问的问题的复制品,我只是需要一些类似的帮助,一个if语句和临时变量保持器对我解决实际问题有很大的帮助!我确实明白为什么你会有这种特殊的态度,尽管hover。感谢所有帮助过我的人,现在我只需要弄清楚为什么会出现越界异常。尽管问你太多了吗你想展示你的工作吗?我希望不会。一点也不,我可能应该这样做。我将来会这样做。投票人:我理解你为什么这么做。但是,我没有发布完整的解决方案,我只是发布了一个简单的例子,说明两个变量如何经常交换,并建议如何使用类似的技术。我甚至不认为pos存在问题请阅读(特别是评论)。我引述:“如果你不想要一个经过全面审查、完整且可测试的答案,堆栈溢出不是一个可以问的地方。”是的,我知道-我只是笼统地说,因为你提到“我没有发布完整的解决方案”表明这样做将是向下投票的原因。为什么不在i=1时启动for循环,因为if子句在检查中的i>0?是的,我可以这样做。但它不会导致算法不正确。
 int arr[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
 int length = arr.length;
 int temp;
 for (int i = 0; i < length/2; i++)
   {
    temp = arr[i];
    arr[i] = arr[length - i - 1];
    arr[length - i - 1] = temp;
   }

 for (int element:arr)
  {
    System.out.println (element);
  }