我目前正试图在http://codingbat.com/prob/p159339
上解决此问题每当我执行代码时,嵌套的for循环都会超出索引,即使我指示它在array.length之前停止一个值。
为什么不起作用?
看看代码:
public static void main(String args[]){
int [] nums = {3,5,9,10,7,4,9,2,3,0,4,2,1};
System.out.println(Arrays.toString(fix34(nums)));
}
public static int[] fix34(int nums[]){
for(int i=0; i<nums.length; i++){
for(int k=0; i<nums.length; k++){
System.out.println(Arrays.toString(nums));
System.out.println(i);
System.out.println(k);
if(nums[i]==3 & nums[k]==4){
int tmp;
tmp= nums[k];
nums[k]= nums[i+1];
nums[i+1]=tmp;
tmp=0;
if(k==13){
break;
}
}
}
}
return nums;
}
答案 0 :(得分:2)
将for(int k=0; i<nums.length; k++){
更改为for(int k=0; k<nums.length; k++){
。您正在使用i
进行比较。它应该是k
。
答案 1 :(得分:0)
for(int i = 0; i < nums.length; i++)
{
if (nums[i] == 3)
{
for(int j = 0 ; j < nums.length; j++)
{
if (nums[j] == 4 && nums[j - 1] != 3)
{
int temp = nums[i+1];
nums[i+1] = nums[j];
nums[j] = temp;
}
}
}
}
return nums;
答案 2 :(得分:-1)
您可以尝试...
public int[] fix34(int[] nums) {
for(int i=0;i<nums.length;i++)
{
//checking for the value of 4
if(nums[i]==4)
{
//looping again through the loop
for(int j=0;j<nums.length;j++)
{
//checking for the value of 3
if(nums[j]==3)
{
//swapping the elements
int temp=nums[i];
nums[i]=nums[j+1];
nums[j+1]=temp;
}
}
}
}
return nums;
}
答案 3 :(得分:-2)
我是这样做的:
public int[] fix34(int[] nums) {
int temp;
for (int i = 0; i < nums.length; i++) {
if (nums[i] == 3 && i != nums.length - 1) {
for (int j = 0; j < nums.length; j++) {
if (j != 0 && nums[j] == 4 && nums[j - 1] != 3) {
temp = nums[i + 1];
nums[i + 1] = nums[j];
nums[j] = temp;
}
}
}
}
return nums;
}