kode visual studio yang tidak dapat dijangkau c# do while loop

Saya mencoba menulis kode (di visual studio 2012 menggunakan c#) yang memungkinkan pengguna memilih akun menggunakan 1,2,3 atau 4. saya menggunakan loop do- while sehingga saya dapat menggunakan 0 untuk keluar (break? ) atau jalankan perulangan lagi hingga opsi yang valid dipilih.

Masalahnya adalah, Visual studio memberi tahu saya bahwa kode validAccount = true; tidak dapat dijangkau, dan tidak mengizinkan saya mengujinya. karena metode ini juga harus mengembalikan nilai, saya mengalami kesalahan "tidak semua jalur kode mengembalikan nilai", dan saya menjadi sangat bingung. ini kode saya:

    static int chooseAccount() {
        bool validAccount = false;
        do {
            Console.Clear();
            Console.WriteLine("Select an Account: \r\n 1: Savings \r\n 2: Debit \r\n 3: Credit \r\n 4: Investment");
            int inputNumber = int.Parse(Console.ReadLine()); //by declaring int inputNumber here we save having an extra line.
            if ((inputNumber >= 1) && (inputNumber <= 4)) {
                return inputNumber;
                validAccount = true;
            }
            else if (inputNumber == 0) {
                break;
            }
            else {
                Console.WriteLine("Error: please choose an account using 1, 2, 3, 4 or 0 to exit");
            }
        } while (!validAccount);
    }//end chooseAccount

Mungkin saya sudah terlalu lama menatap ini dan tidak bisa melihat kesalahan sederhana yang telah saya buat. Saya menyambut baik perspektif atau arahan baru agar saya dapat menemukan solusi, seandainya masalah seperti ini sudah terpecahkan. (Agak sulit mencari di Google untuk sesuatu seperti "kode yang tidak dapat dijangkau" ketika kodenya harus sangat spesifik...)


person Kuro    schedule 06.09.2013    source sumber
comment
Baris setelah pernyataan return return inputNumber; tidak akan dieksekusi. Anda tidak perlu menyetel validAccount karena nilainya hilang dari tumpukan saat Anda kembali dari fungsi.   -  person dcaswell    schedule 06.09.2013
comment
karena Anda kembali atau keluar dari loop, seluruh logika validAccount tetap mubazir. do{} while(true) sudah cukup   -  person Serve Laurijssen    schedule 06.09.2013
comment
Terima kasih semuanya atas balasan cepat Anda! menyelesaikan masalah itu dengan sangat cepat! saya masih memiliki tidak semua jalur kode mengembalikan kesalahan nilai, ada wawasan?   -  person Kuro    schedule 06.09.2013
comment
Periksa jawaban saya untuk memperbaiki kesalahan itu.   -  person mdenton8    schedule 06.09.2013


Jawaban (3)


Baris dengan kesalahan muncul tepat setelah pernyataan return. Kode Anda, dalam setiap kasus (dan kompiler mengetahui hal ini), akan keluar dari fungsi pada baris sebelumnya, sehingga tidak akan pernah mencapai baris berikutnya.

Anda tidak perlu menyetel validAccount ke true untuk memutus perulangan, karena pernyataan return akan keluar dari fungsi, dan karenanya secara otomatis keluar dari perulangan.

Dan terakhir, jika Anda menyetel validAccount ke true dan MAKA kembali, tidak ada fungsi lain yang dapat mengakses validAccount, jadi mengapa Anda perlu repot menyetelnya ke true?

Sebenarnya, Anda tidak memerlukan validAccount sama sekali, karena dengan pernyataan break dan return Anda sudah mengontrol jalan masuk dan keluar dari loop. Ini akan berhasil:

static int chooseAccount() {
    while(true) {
        Console.Clear();
        Console.WriteLine("Select an Account: \r\n 1: Savings \r\n 2: Debit \r\n 3: Credit \r\n 4: Investment");
        int inputNumber = int.Parse(Console.ReadLine());
        if ((inputNumber >= 0) && (inputNumber <= 4)) {
            return inputNumber;
        }
        else 
        {
            Console.WriteLine("Error: please choose an account using 1, 2, 3, 4 or 0 to exit");
        }
    }
}
person mdenton8    schedule 06.09.2013
comment
Kode ini menghindari tidak semua jalur kode mengembalikan nilai juga, tetapi mengembalikan 0. Anda harus mengonfigurasi kode Anda untuk menangani 0 yang dikembalikan juga. - person mdenton8; 06.09.2013
comment
Sebelumnya, Anda breakkeluar dari perulangan jika pengguna memasukkan 0, dan kemudian tidak ada kode setelah perulangan Anda, sehingga fungsi tersebut akan mencapai kurung kurawal akhir dan tidak mengembalikan apa pun. Suatu fungsi selalu harus mengembalikan nilai ketika mendeklarasikan tipe kembalian, sehingga kompiler memunculkan kesalahan. - person mdenton8; 06.09.2013
comment
Terima kasih, itu sangat membantu! persis apa yang saya butuhkan! - person Kuro; 06.09.2013
comment
Tidak masalah. Semoga sukses dengan program Anda! - person mdenton8; 06.09.2013

Perlu diketahui bahwa pernyataan return akan segera mengeluarkan Anda dari fungsi tersebut. Maka validAccount = true; berikutnya tidak akan pernah dieksekusi!

person Ramon Araujo    schedule 06.09.2013
comment
Terima kasih, satu masalah telah diperbaiki! Saya masih mendapatkan kesalahan tidak semua jalur kode mengembalikan nilai dan saya tidak dapat menjalankan untuk mengujinya. - person Kuro; 06.09.2013

Ganti keduanya:

return inputNumber;
validAccount = true;
person Gerrie Schenck    schedule 06.09.2013
comment
Tidak ada alasan untuk menyetel validAccount. Anda tidak dapat mengakses validAccount setelah fungsinya kembali. - person dcaswell; 06.09.2013