Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/350.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 递归方法打印次数过多?_Java_Recursion_Arraylist_Output - Fatal编程技术网

Java 递归方法打印次数过多?

Java 递归方法打印次数过多?,java,recursion,arraylist,output,Java,Recursion,Arraylist,Output,所以我有一个方法,递归地对几何对象的数组进行排序,并按区域顺序打印出来。然而,我似乎无法解决这个小问题。我的方法是正确地打印数据,但它打印arraylist 6次而不是一次(它包含6个对象),知道我做错了什么吗?谢谢 private static void recursionSort(ArrayList<GeometricObject> list, int low, int high){ if (low < high){ int minIndex = l

所以我有一个方法,递归地对几何对象的数组进行排序,并按区域顺序打印出来。然而,我似乎无法解决这个小问题。我的方法是正确地打印数据,但它打印arraylist 6次而不是一次(它包含6个对象),知道我做错了什么吗?谢谢

private static void recursionSort(ArrayList<GeometricObject> list, int low, int high){
    if (low < high){
        int minIndex = low;
        GeometricObject min = list.get(low); //set min to first object in range
        for (int i = low + 1; i <= high; i++){ //loop through all values other than first
            if (list.get(i).getArea() < min.getArea()){ //check if the value is smaller than current min
                min = list.get(i); //if it is update the min
                minIndex = i; //store min index so we can swap locations later
            }
        }

        Collections.swap(list, low, minIndex); //move the original min to new min's old index (tricky wording)
        list.set(low, min); //set the old lowest to the new lowest using store min value

        recursionSort(list, low + 1, high); //call it again

    }
    System.out.println("Recursion sort:" + list);

}
我正在接收输出

Recursion sort:[GeometricObject [color=blue, filled=false, dateOfCreation=Wed Oct 14 12:02:33 EDT 2015]
 Circle [ radius=2.0  Area=12.57  Perimeter=12.57 ]
, GeometricObject [color=green, filled=false, dateOfCreation=Wed Oct 14 12:02:33 EDT 2015]
 Circle [ radius=4.0  Area=50.27  Perimeter=25.13 ]
, GeometricObject [color=green, filled=false, dateOfCreation=Wed Oct 14 12:02:33 EDT 2015]
 Rectangle [ Height=5.0 Width= 11.0  Area=55.0  Perimeter=32.0 ]
, GeometricObject [color=orange, filled=true, dateOfCreation=Wed Oct 14 12:02:33 EDT 2015]
 Rectangle [ Height=10.0 Width= 6.0  Area=60.0  Perimeter=32.0 ]
, GeometricObject [color=red, filled=true, dateOfCreation=Wed Oct 14 12:02:33 EDT 2015]
 Rectangle [ Height=14.0 Width= 12.0  Area=168.0  Perimeter=52.0 ]
, GeometricObject [color=blue, filled=true, dateOfCreation=Wed Oct 14 12:02:33 EDT 2015]
 Circle [ radius=15.0  Area=706.86  Perimeter=94.25 ]
]
Recursion sort:[GeometricObject [color=blue, filled=false, dateOfCreation=Wed Oct 14 12:02:33 EDT 2015]
 Circle [ radius=2.0  Area=12.57  Perimeter=12.57 ]
, GeometricObject [color=green, filled=false, dateOfCreation=Wed Oct 14 12:02:33 EDT 2015]
 Circle [ radius=4.0  Area=50.27  Perimeter=25.13 ]
, GeometricObject [color=green, filled=false, dateOfCreation=Wed Oct 14 12:02:33 EDT 2015]
 Rectangle [ Height=5.0 Width= 11.0  Area=55.0  Perimeter=32.0 ]
, GeometricObject [color=orange, filled=true, dateOfCreation=Wed Oct 14 12:02:33 EDT 2015]
 Rectangle [ Height=10.0 Width= 6.0  Area=60.0  Perimeter=32.0 ]
, GeometricObject [color=red, filled=true, dateOfCreation=Wed Oct 14 12:02:33 EDT 2015]
 Rectangle [ Height=14.0 Width= 12.0  Area=168.0  Perimeter=52.0 ]
, GeometricObject [color=blue, filled=true, dateOfCreation=Wed Oct 14 12:02:33 EDT 2015]
 Circle [ radius=15.0  Area=706.86  Perimeter=94.25 ]
]
Recursion sort:[GeometricObject [color=blue, filled=false, dateOfCreation=Wed Oct 14 12:02:33 EDT 2015]
 Circle [ radius=2.0  Area=12.57  Perimeter=12.57 ]
, GeometricObject [color=green, filled=false, dateOfCreation=Wed Oct 14 12:02:33 EDT 2015]
 Circle [ radius=4.0  Area=50.27  Perimeter=25.13 ]
, GeometricObject [color=green, filled=false, dateOfCreation=Wed Oct 14 12:02:33 EDT 2015]
 Rectangle [ Height=5.0 Width= 11.0  Area=55.0  Perimeter=32.0 ]
, GeometricObject [color=orange, filled=true, dateOfCreation=Wed Oct 14 12:02:33 EDT 2015]
 Rectangle [ Height=10.0 Width= 6.0  Area=60.0  Perimeter=32.0 ]
, GeometricObject [color=red, filled=true, dateOfCreation=Wed Oct 14 12:02:33 EDT 2015]
 Rectangle [ Height=14.0 Width= 12.0  Area=168.0  Perimeter=52.0 ]
, GeometricObject [color=blue, filled=true, dateOfCreation=Wed Oct 14 12:02:33 EDT 2015]
 Circle [ radius=15.0  Area=706.86  Perimeter=94.25 ]
]
Recursion sort:[GeometricObject [color=blue, filled=false, dateOfCreation=Wed Oct 14 12:02:33 EDT 2015]
 Circle [ radius=2.0  Area=12.57  Perimeter=12.57 ]
, GeometricObject [color=green, filled=false, dateOfCreation=Wed Oct 14 12:02:33 EDT 2015]
 Circle [ radius=4.0  Area=50.27  Perimeter=25.13 ]
, GeometricObject [color=green, filled=false, dateOfCreation=Wed Oct 14 12:02:33 EDT 2015]
 Rectangle [ Height=5.0 Width= 11.0  Area=55.0  Perimeter=32.0 ]
, GeometricObject [color=orange, filled=true, dateOfCreation=Wed Oct 14 12:02:33 EDT 2015]
 Rectangle [ Height=10.0 Width= 6.0  Area=60.0  Perimeter=32.0 ]
, GeometricObject [color=red, filled=true, dateOfCreation=Wed Oct 14 12:02:33 EDT 2015]
 Rectangle [ Height=14.0 Width= 12.0  Area=168.0  Perimeter=52.0 ]
, GeometricObject [color=blue, filled=true, dateOfCreation=Wed Oct 14 12:02:33 EDT 2015]
 Circle [ radius=15.0  Area=706.86  Perimeter=94.25 ]
]
Recursion sort:[GeometricObject [color=blue, filled=false, dateOfCreation=Wed Oct 14 12:02:33 EDT 2015]
 Circle [ radius=2.0  Area=12.57  Perimeter=12.57 ]
, GeometricObject [color=green, filled=false, dateOfCreation=Wed Oct 14 12:02:33 EDT 2015]
 Circle [ radius=4.0  Area=50.27  Perimeter=25.13 ]
, GeometricObject [color=green, filled=false, dateOfCreation=Wed Oct 14 12:02:33 EDT 2015]
 Rectangle [ Height=5.0 Width= 11.0  Area=55.0  Perimeter=32.0 ]
, GeometricObject [color=orange, filled=true, dateOfCreation=Wed Oct 14 12:02:33 EDT 2015]
 Rectangle [ Height=10.0 Width= 6.0  Area=60.0  Perimeter=32.0 ]
, GeometricObject [color=red, filled=true, dateOfCreation=Wed Oct 14 12:02:33 EDT 2015]
 Rectangle [ Height=14.0 Width= 12.0  Area=168.0  Perimeter=52.0 ]
, GeometricObject [color=blue, filled=true, dateOfCreation=Wed Oct 14 12:02:33 EDT 2015]
 Circle [ radius=15.0  Area=706.86  Perimeter=94.25 ]
]
Recursion sort:[GeometricObject [color=blue, filled=false, dateOfCreation=Wed Oct 14 12:02:33 EDT 2015]
 Circle [ radius=2.0  Area=12.57  Perimeter=12.57 ]
, GeometricObject [color=green, filled=false, dateOfCreation=Wed Oct 14 12:02:33 EDT 2015]
 Circle [ radius=4.0  Area=50.27  Perimeter=25.13 ]
, GeometricObject [color=green, filled=false, dateOfCreation=Wed Oct 14 12:02:33 EDT 2015]
 Rectangle [ Height=5.0 Width= 11.0  Area=55.0  Perimeter=32.0 ]
, GeometricObject [color=orange, filled=true, dateOfCreation=Wed Oct 14 12:02:33 EDT 2015]
 Rectangle [ Height=10.0 Width= 6.0  Area=60.0  Perimeter=32.0 ]
, GeometricObject [color=red, filled=true, dateOfCreation=Wed Oct 14 12:02:33 EDT 2015]
 Rectangle [ Height=14.0 Width= 12.0  Area=168.0  Perimeter=52.0 ]
, GeometricObject [color=blue, filled=true, dateOfCreation=Wed Oct 14 12:02:33 EDT 2015]
 Circle [ radius=15.0  Area=706.86  Perimeter=94.25 ]
]

您正在递归方法末尾打印列表。因为每次调用都会发生这种情况,所以一旦最内部的递归调用完成,每次递归调用都会打印列表


将“打印”移到递归方法之外的位置,使其刚好在进行初始递归调用之后。

这里的问题是,每个递归级别都会在返回之前打印出列表

要修复此问题,可以重载要打印的方法:

private static void recursionSort(ArrayList<GeometricObject> list){
    recursionSort(list, 0, list.size())
    System.out.println("Recursion sort:" + list);        
}

private static void recursionSort(ArrayList<GeometricObject> list, int low, int high){
    if (low < high){
        int minIndex = low;
        GeometricObject min = list.get(low); //set min to first object in range
        for (int i = low + 1; i <= high; i++){ //loop through all values other than first
            if (list.get(i).getArea() < min.getArea()){ //check if the value is smaller than current min
                min = list.get(i); //if it is update the min
                minIndex = i; //store min index so we can swap locations later
            }
        }

        Collections.swap(list, low, minIndex); //move the original min to new min's old index (tricky wording)
        list.set(low, min); //set the old lowest to the new lowest using store min value

        recursionSort(list, low + 1, high); //call it again

    }

}
私有静态无效递归排序(ArrayList列表){
递归排序(list,0,list.size())
System.out.println(“递归排序:+list”);
}
私有静态void recursionSort(ArrayList list,int-low,int-high){
如果(低<高){
int minIndex=低;
GeometricObject min=list.get(低);//将min设置为范围内的第一个对象

对于(int i=low+1;i您是否尝试从函数返回列表

public static void main (String args []){
    ArrayList<GeometricObject> list = new ArrayList<GeometricObject>();
    System.out.println(recursionSort(list, 0,list.size()-1).toString());
}

private static ArrayList<GeometricObject> recursionSort(ArrayList<GeometricObject> list, int low, int high){
    if (low < high){
        int minIndex = low;
        GeometricObject min = list.get(low); 
        for (int i = low + 1; i <= high; i++){ 
            if (list.get(i).getArea() < min.getArea()){ 
                min = list.get(i); 
                minIndex = i; 
            }
        }

        Collections.swap(list, low, minIndex);
        list.set(low, min);

        recursionSort(list, low + 1, high);

    }
    return list;

}   
publicstaticvoidmain(字符串参数[]){
ArrayList=新建ArrayList();
System.out.println(递归排序(list,0,list.size()-1.toString());
}
私有静态ArrayList recursionSort(ArrayList列表,整型低,整型高){
如果(低<高){
int minIndex=低;
GeometricObject min=list.get(低);

对于(int i=low+1;i)你要递归6次,所以它要打印6次。在你的方法之外打印它。我尝试了上面的方法,但没有打印任何东西,我想我看到了这个想法,但是方法private static void recursionSort(ArrayList list)从未使用过,所以我仍然有点卡住。更改调用
recursionSort的位置(list,low,high)
要使用
recursionSort(list)
相反,我只需将recursionSort(list,0,list.size())更改为recursionSort(list,0,5),非常感谢!
public static void main (String args []){
    ArrayList<GeometricObject> list = new ArrayList<GeometricObject>();
    System.out.println(recursionSort(list, 0,list.size()-1).toString());
}

private static ArrayList<GeometricObject> recursionSort(ArrayList<GeometricObject> list, int low, int high){
    if (low < high){
        int minIndex = low;
        GeometricObject min = list.get(low); 
        for (int i = low + 1; i <= high; i++){ 
            if (list.get(i).getArea() < min.getArea()){ 
                min = list.get(i); 
                minIndex = i; 
            }
        }

        Collections.swap(list, low, minIndex);
        list.set(low, min);

        recursionSort(list, low + 1, high);

    }
    return list;

}