Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/311.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 爪哇语-1“;位置_Java - Fatal编程技术网

Java 爪哇语-1“;位置

Java 爪哇语-1“;位置,java,Java,我有一个问题: 该方法接受整数数组作为其输入,并返回一个新数组,该数组是 输入数组的排列。方法fix34重新排列输入数组,如 每个3后面紧跟着一个4(例如,如果位置i处有一个3,则 在位置i+1处为4)。该方法保持3s的原始位置,但可能 移动任何其他数字,移动最小数量的数字。 关于输入的假设: 数组包含相同数量的3和4(每3个就有一个4) 阵列中没有两个连续的3 在某个位置i处a 3的匹配4在位置j处,其中j>i 好的,这就是我写的: public class Fix34 { public

我有一个问题:

该方法接受整数数组作为其输入,并返回一个新数组,该数组是 输入数组的排列。方法fix34重新排列输入数组,如 每个3后面紧跟着一个4(例如,如果位置i处有一个3,则 在位置i+1处为4)。该方法保持3s的原始位置,但可能 移动任何其他数字,移动最小数量的数字。 关于输入的假设:

  • 数组包含相同数量的3和4(每3个就有一个4)
  • 阵列中没有两个连续的3
  • 在某个位置i处a 3的匹配4在位置j处,其中j>i
好的,这就是我写的:

public class Fix34 {

public static void main(String[] args){
    int [] args1 ={3,1,2,3,5,4,4};
    int[] args11=fix34(args1);
    for (int i = 0; i<=args11.length-1;i++ ){
        System.out.print(args11[i]+" ");}}




public static int pos (int[] arr){
    int i= arr.length-1;
    while (arr[i]!=4){
        i=-1;
        }
    return i;
}


public static int[] fix34(int[] nums){
    for(int i = 0; i<=nums.length-1; i++){
        if (nums[i] == 3){
            nums[pos(nums)]=nums[i+1];
            nums[i+1]=4;

        }

    }
    return nums;
}

}
为什么阵列会到达-1位置


谢谢您在此处将其设置为-1:

i=-1;
我想你是在开玩笑

i-= 1;
相反:

i=-1;

您的问题在这段代码中

public static int pos (int[] arr){
    int i= arr.length-1;
    while (arr[i]!=4){
        i=-1;
    }
    return i;
}
如果数组中的最后一个元素是4,则永远不会输入while循环,因此像3、1、2、4这样的数组就可以了。否则将输入循环,并将i设置为-1。我想你的意思是减量。在这种情况下,请更换

i=-1


正如在另一个答案中提到的,确保我没有低于0。

哇,这个问题有点夸张了。嵌套循环是这里的关键…来看看

public int[] fix34(int[] nums) {
  for(int a = 0; a < nums.length; a++){ //we see 4's first
  for(int b = 0; b < nums.length - 1; b++){ //then the nested loop finds a 3 
  //length - 1 to stay in bounds, although not needed here...
  if(nums[a] == 4 && nums[b] == 3){
  //swap

  int tmp = nums[b + 1];
  nums[b + 1] = nums[a];
  nums[a] = tmp;
  }
  }
  }
  return nums;
}
public int[]fix34(int[]nums){
对于(inta=0;a
Change
i=-1
i-=1。哦,谢谢……)现在它起作用了。我真傻。接受答案,继续学习。需要更多帮助时请回来。感谢购物堆栈溢出。另一个问题:如何在不使用循环的情况下打印数组?@Nir,使用foreach循环。例如,请参见。和+1,用于思考避免索引越界问题的方法。哈哈!我没有看到,我读的是I-=1(从I中减去1),这可能是海报的意图。相反,他写了i=-1。
i--
i=i-1
public int[] fix34(int[] nums) {
  for(int a = 0; a < nums.length; a++){ //we see 4's first
  for(int b = 0; b < nums.length - 1; b++){ //then the nested loop finds a 3 
  //length - 1 to stay in bounds, although not needed here...
  if(nums[a] == 4 && nums[b] == 3){
  //swap

  int tmp = nums[b + 1];
  nums[b + 1] = nums[a];
  nums[a] = tmp;
  }
  }
  }
  return nums;
}