แบบฝึกหัด - ส่งกลับอาร์เรย์จากวิธีการ

เสร็จสมบูรณ์เมื่อ

เมื่อพัฒนาแอปพลิเคชัน คุณมักจําเป็นต้องสร้างและปรับเปลี่ยนชุดข้อมูล วิธีการนี้มีประโยชน์สําหรับการดําเนินการกับข้อมูล และเป็นเครื่องมือที่มีประสิทธิภาพอย่างยิ่งสําหรับการสร้างชุดข้อมูลด้วยตนเอง การพัฒนาวิธีการเพื่อสร้างอาร์เรย์ที่แสดงชุดข้อมูลของคุณช่วยให้โค้ดของคุณสามารถนํามาใช้ใหม่ จัดระเบียบ และทําให้ง่ายขึ้น ในแบบฝึกหัดนี้ คุณจะได้ฝึกส่งกลับอาร์เรย์จากวิธีการ

ค้นหาเหรียญเพื่อทําการเปลี่ยนแปลง

สมมติว่าคุณมีเหรียญของค่าที่แตกต่างกันหลายเหรียญ คุณได้รับมอบหมายให้หาเหรียญสองตัวที่มีผลรวมเท่ากับค่าเป้าหมาย ในแบบฝึกหัดนี้ เหรียญที่พร้อมใช้งานจะแสดงในอาร์เรย์จํานวนเต็ม คุณจะต้องส่งกลับดัชนีของสองเหรียญในอาร์เรย์ใหม่ มาเริ่มต้นกันเลย!

  1. ใน Visual Studio Code Editor ให้ลบโค้ดที่มีอยู่ออกจากแบบฝึกหัดก่อนหน้า

  2. ป้อนรหัสต่อไปนี้ลงในตัวแก้ไขรหัส Visual Studio:

    int[] TwoCoins(int[] coins, int target) 
    {
        return  new int[0];
    }
    

    ในกรณีที่ไม่พบเหรียญสองเหรียญ วิธีการของคุณจะส่งกลับอาร์เรย์ว่าง ใช้เวลาสักครู่เพื่อพิจารณาไวยากรณ์ของผลลัพธ์ที่ส่งกลับ แม้ว่าคุณจะสามารถสร้างตัวแปรเพื่อจัดเก็บอาร์เรย์ใหม่ int[] และส่งกลับตัวแปรได้ แต่ return คําสั่ง จะช่วยให้คุณสามารถสร้างและส่งกลับค่าได้ในเวลาเดียวกัน

  3. มีหลายวิธีในการแก้ปัญหานี้ ใช้เวลาสักครู่เพื่อพิจารณาว่าคุณอาจค้นหาตัวเลขสองตัวในอาร์เรย์ที่มีผลรวมเท่ากับค่าที่กําหนดได้อย่างไร

    ในแบบฝึกหัดนี้ จะใช้วิธีการต่อไปนี้:

    1. เลือกตัวเลขหนึ่งตัวจากอาร์เรย์
    2. ตรวจสอบตัวเลขอื่นๆ ทีละครั้งเพื่อดูว่ามีการเพิ่มค่าเป้าหมายหรือไม่
    3. ส่งกลับผลลัพธ์ทันทีที่พบรายการที่ตรงกัน
  4. หากต้องการตรวจสอบแต่ละหมายเลขในอาร์เรย์ ให้ TwoCoins อัปเดตวิธีการ ด้วยรหัสต่อไปนี้:

    int[] TwoCoins(int[] coins, int target) 
    {
        for (int curr = 0; curr < coins.Length; curr++) 
        {
            for (int next = curr + 1; next < coins.Length; next++) 
            {
    
            }
        }
    
        return  new int[0];
    }
    

    currที่นี่ แสดงดัชนีเหรียญคงที่หนึ่งดัชนีและnextแสดงดัชนีเหรียญที่ตามมา คุณจะลองเพิ่มแต่ละ next เหรียญด้วยเหรียญคงที่ curr เพื่อดูว่าเท่ากับค่าเป้าหมายหรือไม่

  5. ถัดไป ให้เพิ่มตรรกะเพื่อตรวจสอบผลรวมของสองเหรียญสําหรับค่าเป้าหมาย เมื่อต้องการทําเช่นนั้น ให้อัปเดตการวนรอบก่อนหน้า for ด้วยโค้ดต่อไปนี้:

    for (int curr = 0; curr < coins.Length; curr++) 
    {
        for (int next = curr + 1; next < coins.Length; next++) 
        {
            if (coins[curr] + coins[next] == target) 
            {
                return new int[]{curr, next};
            }
    
        }
    }
    

    ในรหัสนี้ คุณกําลังตรวจสอบว่าผลรวมของค่าที่ curr และ next ในอาร์เรย์ เท่ากับค่าเป้าหมายหรือไม่ ถ้าผลรวมเท่ากัน คุณสร้างอาร์เรย์เพื่อจัดเก็บดัชนีเหล่านั้นและส่งกลับ ถ้าไม่เท่ากัน คุณสามารถเพิกเฉยต่อและทําการตรวจสอบต่อไปได้

ทดสอบโซลูชันของคุณ

ในขั้นตอนนี้ คุณจะทดสอบโค้ดของคุณเพื่อให้แน่ใจว่ารหัสทํางานได้อย่างถูกต้อง ก่อนอื่น คุณจะเตรียมใช้งานตัวแปรบางอย่างเพื่อจัดเก็บข้อมูลที่ป้อนเข้า จากนั้นคุณจะเรียกใช้เมธอด และพิมพ์ผลลัพธ์

  1. สร้างบรรทัดรหัสว่างใหม่เหนือ TwoCoins ลายเซ็นวิธีการ จากนั้นป้อนรหัสต่อไปนี้:

    int target = 60;
    int[] coins = new int[] {5, 5, 50, 25, 25, 10, 5};
    int[] result = TwoCoins(coins, target);
    

    โปรดจําไว้ว่า TwoCoins วิธีการ จะส่งกลับอาร์เรย์ว่างถ้าไม่พบการเปลี่ยนแปลง คุณจะต้องตรวจสอบขนาดอาร์เรย์ก่อนที่จะพยายามพิมพ์ result อาร์เรย์

  2. ป้อนบรรทัดรหัสว่างใหม่ จากนั้นป้อนรหัสต่อไปนี้:

    if (result.Length == 0) 
    {
        Console.WriteLine("No two coins make change");
    } 
    else 
    {
        Console.WriteLine($"Change found at positions {result[0]} and {result[1]}");
    }
    
  3. หากจําเป็น ให้เปิดแผงเทอร์มินัลแบบรวมของ Visual Studio Code

  4. ที่พร้อมท์คําสั่งเทอร์มินัล ให้ใส่ dotnet run เปรียบเทียบเอาต์พุตของคุณดังต่อไปนี้:

    Change found at positions 2 and 5
    

    หากรหัสของคุณแสดงผลลัพธ์ที่ไม่คาดคิด คุณจะต้องตรวจสอบรหัสของคุณเพื่อค้นหาข้อผิดพลาดและทําการอัปเดต เรียกใช้รหัสอีกครั้งเพื่อดูว่าคุณได้แก้ไขปัญหาหรือไม่ อัปเดตและเรียกใช้โค้ดของคุณต่อจนกว่ารหัสของคุณจะสร้างผลลัพธ์ที่คาดหวัง

ค้นหาเหรียญหลายคู่ที่สร้างการเปลี่ยนแปลง

ในขั้นตอนนี้ คุณจะขยาย TwoCoins วิธีการเพื่อค้นหาคู่ของเหรียญเพิ่มเติมที่มีผลรวมเท่ากับค่าเป้าหมาย สําหรับแบบฝึกหัดนี้ คุณจะพบห้าคู่สูงสุด ซึ่งหมายความว่าชนิดผลลัพธ์จะเป็นอาร์เรย์ 2D แทนที่จะเป็นอาร์เรย์ 1D และคุณจะต้องปรับเปลี่ยนวิธีที่รหัสของคุณส่งกลับผลลัพธ์ มาเริ่มต้นกันเลย!

  1. เปลี่ยนชนิดการส่งกลับในลายเซ็นวิธีการ จาก int[] ไปเป็น int[,] โดยการอัปเดตรหัสของคุณดังต่อไปนี้:

    int[,] TwoCoins(int[] coins, int target)
    

    ถัดไป คุณจะสร้าง int[,] อาร์เรย์เพื่อจัดเก็บและส่งกลับผลลัพธ์ของคุณ และตัวแปรตัวนับเพื่อติดตามจํานวนคู่ที่เพิ่มลงในอาร์เรย์

  2. อัปเดตวิธีการ TwoCoins ด้วยโค้ดต่อไปนี้:

    int[,] TwoCoins(int[] coins, int target) 
    {
        int[,] result = {{-1,-1},{-1,-1},{-1,-1},{-1,-1},{-1,-1}};
        int count = 0;
    

    โปรดสังเกตว่า คุณได้เตรียมใช้งานองค์ประกอบอาร์เรย์ผลลัพธ์เป็น-1 ซึ่งจะช่วยให้คุณสามารถพิมพ์คู่ที่พบในภายหลังได้

    ถัดไป คุณจะใช้ result อาร์เรย์เพื่อจัดเก็บคู่ที่พบแต่ละรายการแทนที่จะส่งคืนค่าที่ตรงกันครั้งแรก

  3. อัปเดตวิธีการ TwoCoins ด้วยโค้ดต่อไปนี้:

    int[,] TwoCoins(int[] coins, int target) 
    {
        int[,] result = {{-1,-1},{-1,-1},{-1,-1},{-1,-1},{-1,-1}};
        int count = 0;
    
        for (int curr = 0; curr < coins.Length; curr++) 
        {
            for (int next = curr + 1; next < coins.Length; next++) 
            {
                if (coins[curr] + coins[next] == target) 
                {
                    result[count, 0] = curr;
                    result[count, 1] = next;
                    count++;
                }
    
            }
        }
    

    โปรดสังเกตว่า count จะเพิ่มหน่วยทุกครั้งที่มีการเพิ่มคู่ลงในอาร์เรย์ ซึ่งอาจทําให้เกิดข้อผิดพลาดดัชนีนอกขอบเขตถ้ามีมากกว่าห้าคู่ เพื่อป้องกันข้อผิดพลาดนี้ คุณสามารถเพิ่มรหัสเพื่อตรวจสอบค่าของ count และส่งกลับผลลัพธ์ของ result อาร์เรย์ ที่ถูกกรอก

  4. อัปเดตตรรกะใน TwoCoins วิธีการ ด้วยโค้ดต่อไปนี้:

    for (int next = curr + 1; next < coins.Length; next++) 
    {
        if (coins[curr] + coins[next] == target) 
        {
            result[count, 0] = curr;
            result[count, 1] = next;
            count++;
        }
        if (count == result.GetLength(0)) 
        {
            return result;
        }
    }
    

    สุดท้าย คุณจะต้องอัปเดตคําสั่งส่งกลับค่าสุดท้ายเพื่อส่งกลับผลลัพธ์ที่ถูกต้องถ้าไม่พบรายการที่ตรงกันทั้งหมด หรือถ้าพบรายการที่ตรงกันน้อยกว่าห้ารายการ

  5. นําทางไปยังคําสั่ง return ใน TwoCoins วิธีการ ปรับเปลี่ยนคําสั่ง return ให้ตรงกับโค้ดต่อไปนี้:

    if (count == 0) 
    {
        return new int[0,0];
    }
    return result;
    

    คุณยังสามารถย่อรหัสส่งกลับนี้โดยใช้ตัวดําเนินการ ternary เช่น:

    return (count == 0) ? new int[0,0] : result;
    

    สําคัญ

    ความยืดหยุ่นของ return คําหลักช่วยให้คุณสามารถส่งกลับค่าของนิพจน์ได้ ตราบใดที่ผลลัพธ์ตรงกับชนิดผลลัพธ์ที่ระบุของวิธีการ

  6. ในตอนนี้ TwoCoins เมธอด ควรตรงกับโค้ดต่อไปนี้:

    int[,] TwoCoins(int[] coins, int target) 
    {
        int[,] result = {{-1,-1},{-1,-1},{-1,-1},{-1,-1},{-1,-1}};
        int count = 0;
    
        for (int curr = 0; curr < coins.Length; curr++) 
        {
            for (int next = curr + 1; next < coins.Length; next++) 
            {
                if (coins[curr] + coins[next] == target) 
                {
                    result[count, 0] = curr;
                    result[count, 1] = next;
                    count++;
                }
                if (count == result.GetLength(0)) 
                {
                    return result;
                }
            }
        }
        return (count == 0) ? new int[0,0] : result;
    }
    

จับภาพอาร์เรย์ส่งกลับใหม่

ตอนนี้วิธีการของคุณส่งคืนอาร์เรย์ 2D แล้ว คุณสามารถอัปเดตรหัสของคุณเพื่อดึงและพิมพ์ผลลัพธ์ได้ เนื่องจากมีการเตรียมใช้งานองค์ประกอบอาร์เรย์ผลลัพธ์ไปยัง -1คุณสามารถเพิ่มการตรวจสอบเพื่อพิมพ์คู่ทั้งหมดจนกว่าจะ -1 พบค่า

  1. นําทางไปยังจุดเริ่มต้นของโปรแกรมของคุณที่มี target การกําหนดตัวแปร ปรับเปลี่ยนโค้ดของคุณดังต่อไปนี้:

    int target = 30;
    int[] coins = new int[] {5, 5, 50, 25, 25, 10, 5};
    int[,] result = TwoCoins(coins, target);
    

    ถัดไป คุณจะอัปเดตการเรียกเพื่อให้ Console.WriteLine พิมพ์ result ค่าอย่างถูกต้อง

  2. นําทางไปยัง Console.WriteLine การโทร อัปเดตโค้ดของคุณเพื่อให้ตรงกับรายการต่อไปนี้:

    if (result.Length == 0) 
    {
        Console.WriteLine("No two coins make change");
    } 
    else 
    {
        Console.WriteLine("Change found at positions:");
        for (int i = 0; i < result.GetLength(0); i++) 
        {
            if (result[i,0] == -1) 
            {
                break;
            }
            Console.WriteLine($"{result[i,0]},{result[i,1]}");
        }
    }
    

    ที่นี่ คุณตรวจสอบอาร์เรย์ที่ว่างเปล่า as-isและพิมพ์ค่าของอาร์เรย์ 2D ใน for-loop -1เมื่อพบค่า คุณจะแยกออกจากรอบเนื่องจากไม่มีคู่ถัดไป

ตรวจสอบงานของคุณ

สําหรับงานนี้ คุณจะเรียกใช้แอปพลิเคชันของคุณจากเทอร์มินัลรวมและตรวจสอบว่ารหัสของคุณทํางานได้อย่างถูกต้อง มาเริ่มต้นกันเลย

  1. เปรียบเทียบโค้ดของคุณกับโค้ดต่อไปนี้เพื่อให้แน่ใจว่าถูกต้อง:

    int target = 30;
    int[] coins = new int[] {5, 5, 50, 25, 25, 10, 5};
    int[,] result = TwoCoins(coins, target);
    
    if (result.Length == 0) 
    {
        Console.WriteLine("No two coins make change");
    } 
    else 
    {
        Console.WriteLine("Change found at positions:");
        for (int i = 0; i < result.GetLength(0); i++) 
        {
            if (result[i,0] == -1) 
            {
                break;
            }
            Console.WriteLine($"{result[i,0]},{result[i,1]}");
        }
    }
    
    int[,] TwoCoins(int[] coins, int target) 
    {
        int[,] result = {{-1,-1},{-1,-1},{-1,-1},{-1,-1},{-1,-1}};
        int count = 0;
    
        for (int curr = 0; curr < coins.Length; curr++) 
        {
            for (int next = curr + 1; next < coins.Length; next++) 
            {    
                if (coins[curr] + coins[next] == target) 
                {
                    result[count, 0] = curr;
                    result[count, 1] = next;
                    count++;
                }
                if (count == result.GetLength(0)) 
                {
                    return result;
                }
            }
        }
        return (count == 0) ? new int[0,0] : result;
    }
    
  2. บันทึกงานของคุณโดยใช้ Ctrl + S หรือใช้เมนูไฟล์ของ Visual Studio Code

  3. หากจําเป็น ให้เปิดแผงเทอร์มินัลแบบรวมของ Visual Studio Code

    ในแผง EXPLORER หากต้องการเปิดเทอร์มินัลที่ตําแหน่งโฟลเดอร์ TestProject ของคุณ ให้คลิกขวาที่ TestProject จากนั้นเลือก เปิดในเทอร์มินัลแบบรวม

  4. ที่พร้อมท์คําสั่งเทอร์มินัล ให้ใส่ dotnet ทํางาน

  5. ตรวจสอบว่าโค้ดของคุณสร้างเอาต์พุตต่อไปนี้:

    Change found at positions:
    0,3
    0,4
    1,3
    1,4
    3,6
    

    หากรหัสของคุณแสดงผลลัพธ์ที่แตกต่างกัน คุณจะต้องตรวจสอบรหัสของคุณเพื่อค้นหาข้อผิดพลาดและทําการอัปเดต เรียกใช้รหัสอีกครั้งเพื่อดูว่าคุณได้แก้ไขปัญหาหรือไม่ อัปเดตและเรียกใช้โค้ดของคุณต่อจนกว่ารหัสของคุณจะสร้างผลลัพธ์ที่คาดหวัง

  6. ถัดไป อัปเดตค่า ของ target เป็นค่าของ 80:

    int target = 80;
    
  7. บันทึกงานของคุณ จากนั้นป้อน dotnet ทํางาน ที่พรอมต์คําสั่งเทอร์มินัล

  8. เพื่อตรวจสอบว่าโค้ดของคุณทํางานตามที่คาดไว้หรือไม่ ให้เปรียบเทียบเอาต์พุตของแอปพลิเคชันของคุณกับเอาต์พุตต่อไปนี้:

    No two coins make change
    

    หากรหัสของคุณแสดงผลลัพธ์ที่แตกต่างกัน คุณจะต้องตรวจสอบรหัสของคุณเพื่อค้นหาข้อผิดพลาดและทําการอัปเดต เรียกใช้รหัสอีกครั้งเพื่อดูว่าคุณได้แก้ไขปัญหาหรือไม่ อัปเดตและเรียกใช้โค้ดของคุณต่อจนกว่ารหัสของคุณจะสร้างผลลัพธ์ที่คาดหวัง