即使没有执行循环,如何解决循环问题?

时间:2019-07-10 14:06:59

标签: c#

好的,所以我试图弄清楚为什么我遇到循环问题。方法GetNewDvdInfo()的目的是返回一个具有5个属性的新dvd类,并将在DvdController.cs方法中传递给CreateDvd(),然后将显示所有dvd和dvd。用户已添加。问题是GetNewDvdInfo()方法本身在重复,但是当我返回null时,它没有循环。

DvdView.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using DvdManager.Models;

/* 
    GetMenuChoice() : int
    GetNewDvdInfo(): Dvd
    DisplayDvd(Dvd dvd) : void
    EditDvdInfo(Dvd dvd) : Dvd
    SearchDvd() : int
    ConfirmRemoveDvd(Dvd) : boolean
*/

namespace DvdManager.View
{
    public class DvdView
    {
        public int GetMenuChoice()
        {
            string input;
            int choice;

            Console.Clear();
            Console.WriteLine("Press 1 to display movies");
            Console.WriteLine("Press 2 to add movie");
            input = Console.ReadLine();

            if (int.TryParse(input, out choice))
            {
                switch (choice)
                {
                    case 1:
                        break;
                    case 2:
                        break;
                    default:
                        Console.WriteLine("Invalid input");
                        break;
                }

            }
            return choice;


        }

        public Dvd GetNewDvdInfo() //looping here
        {
            string inputReleaseYear;
            string inputRating;

            int id = 4;
            string readTitle;            
            int readReleaseYear;
            string readDirector;            
            float readRating;

            Console.WriteLine("What is the Title of the DVD?");
            readTitle = Console.ReadLine();

            Console.WriteLine("What is the Release Year of the DVD?");
            inputReleaseYear = Console.ReadLine();
            int.TryParse(inputReleaseYear, out readReleaseYear);

            Console.WriteLine("Who is the Director of the DVD?");
            readDirector = Console.ReadLine();

            Console.WriteLine("What is the star rating of the DVD?");
            inputRating = Console.ReadLine();
            float.TryParse(inputRating, out readRating);


            var dvd = new Dvd(id, readTitle, readReleaseYear, readDirector, readRating);
            Dvd newDvd = GetNewDvdInfo();
            return dvd;
        }

        public void DisplayDvd(Dvd dvd)
        {

        }

        public Dvd EditDvdInfo(Dvd dvd)
        {
            return null;
        }

        public int SearchDvd()
        {
            return 0;
        }

        public Boolean ConfirmRemoveDvd(Dvd dvd)
        {
            return false;
        }
    }
}

DvdController.cs

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using DvdManager.Models;
using DvdManager.Data;
using DvdManager.View;

/* 
    Run() : void
    Private CreateDvd(): void
    Private DisplayDvds(): void
    Private SearchDvds(): void
    Private EditDvd() : void
    Private RemoveDvd() : void
*/

namespace DvdManager.Controllers
{
    public class DvdController
    {
        public DVDList _dvds = new DVDList();        


        public void Run()
        {
            Console.WriteLine("Welcome To Dvd Manager");
            DvdView view = new DvdView();

            var pass = view.GetMenuChoice();

            if (pass == 1)
            {
                CreateDvd();
            } 
            else if (pass == 2)
            {
                view.GetNewDvdInfo();
                CreateDvd();
            }
            else
                Console.WriteLine("Invalid.");            
        }

        private void CreateDvd() //Create
        {
            var myView = new DvdView();
            var dvdInfos = myView.GetNewDvdInfo();

            List<Dvd> Dvds = _dvds.GetList();

            Dvds.Add(new Dvd(0, "Batman", 2010, "Bruce", 4));
            Dvds.Add(new Dvd(1, "Superman", 2009, "John", 4));
            Dvds.Add(new Dvd(2, "Wonderwoman", 2012, "Omar", 4));
            Dvds.Add(dvdInfos);


            DisplayDvds();
        }

        private void DisplayDvds() //Read List<Dvd> dvds
        {
            List<Dvd> Dvds = _dvds.GetList();

            for (int i = 0; i < Dvds.Count; i++)
            {                
                Console.WriteLine(Dvds[i]);
            }

            RemoveDvd();
        }

        private void SearchDvds() //List
        {

        }

        private void EditDvd(int id, Dvd dvd) //Update
        {

        }

        private void RemoveDvd() //Delete int id
        {
            List<Dvd> Dvds = _dvds.GetList();

            //Dvds.RemoveAt(Dvds[1]);
            Dvds.Remove(Dvds.Single(x => x.Id == 1));

            Console.WriteLine("Removed movie from list:");

            for (int i = 0; i < Dvds.Count; i++)
            {
                Console.WriteLine(Dvds[i]);
            }
        }
    }
}

enter image description here

2 个答案:

答案 0 :(得分:0)

您正在GetNewDvdInfo()的末尾进行递归调用,只需将其删除即可。

答案 1 :(得分:0)

您在此处递归调用此方法:

            var dvd = new Dvd(id, readTitle, readReleaseYear, readDirector, readRating);
            Dvd newDvd = GetNewDvdInfo(); //!!!
            return dvd;

因此循环。似乎不需要这一行代码。