簡體   English   中英

即使我碰到返回Java也無法跳出while循環

[英]Could not jump out of a while loop even when I hit a return Java

這是我的代碼,當我的輸入是{2,3,4,5}和= {1}時,即使我按下“ return r1”,也無法跳出while循環。 該程序將打印“ ???”,但一直循環運行,直到獲得超出界限的異常的索引為止。 它是有線的。

int[] nums1 = {2, 3, 4, 5}, nums2 = {1};

public static double findMedianSortedArrays(int[] nums1, int[] nums2) {

    if(nums1.length > nums2.length) {
        findMedianSortedArrays(nums2, nums1);
    }
    int half = (nums1.length + nums2.length) / 2;
    double l1 = 0;
    double l2 = 0;
    double r1 = 0;
    double r2 = 0;
    int cutR = nums1.length;
    int cutL = 0;
    int cut1 = 0;
    while(cut1 <= nums1.length) {
        cut1 = (cutR + cutL) / 2;
        int cut2 = half - cut1;

        l1 = (cut1 == 0) ? Integer.MIN_VALUE : nums1[cut1 - 1];
        r1 = (cut1 == nums1.length) ? Integer.MAX_VALUE : nums1[cut1];
        l2 = (cut2 == 0) ? Integer.MIN_VALUE : nums2[cut2 - 1];
        r2 = (cut2 == nums2.length) ? Integer.MAX_VALUE:nums2[cut2];

        if(l1 > r2)  
            cutR =  cut1 - 1;
        else if(l2 > r1)  
            cutL = cut1 + 1;
        else {
            if((nums1.length + nums2.length) % 2 == 0) { 
                l1 = (l1 > l2) ? l1 : l2;
                r1 = (r1 < r2) ? r1 : r2;
                return (l1 + r1) / 2;
            } else {
                r1 = (r1 < r2) ? r1 : r2;
                System.out.println("???");
                return r1;
            }
        }
    }
    return -1;


}

遞歸調用方法時,您會在堆棧上創建該方法的新實例。 嘗試將其視為關卡甚至電影《盜夢空間》。 您在main方法中,並調用run()。 您現在處於run()的1級。 如果在級別1時再次調用run(),則轉到級別2。從級別2返回時,您將返回級別1。如果從級別1返回,則將返回到原始run()所在的位置。被稱為。

我可能不正確理解您打算做什么,但是我認為您的問題是由於以下原因:

if(nums1.length > nums2.length) {
    findMedianSortedArrays(nums2, nums1);
}

我想如果nums1.length <= nums2.length ,您的方法可以工作,否則,您只需在交換參數后調用它即可。

發生這種情況時的問題是,您對返回值不執行任何操作(成功執行此操作,因此它輸出??? ),然后使用錯誤的參數繼續進行操作,最終拋出IndexOutOfBoundException

您只需要做的就是按預期順序返回帶有參數的值:

if(nums1.length > nums2.length) {
    return findMedianSortedArrays(nums2, nums1);
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM