Java 爪哇语-1“;位置
我有一个问题: 该方法接受整数数组作为其输入,并返回一个新数组,该数组是 输入数组的排列。方法fix34重新排列输入数组,如 每个3后面紧跟着一个4(例如,如果位置i处有一个3,则 在位置i+1处为4)。该方法保持3s的原始位置,但可能 移动任何其他数字,移动最小数量的数字。 关于输入的假设: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
- 数组包含相同数量的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
Changei=-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;
}