Консольное приложение C # looping - PullRequest
3 голосов
/ 19 октября 2011

Привет, я учусь на программиста, и это проект, над которым я работаю. Консоль в основном принимает пользовательский ввод (диаметр) и сообщает вам, сколько кусочков пиццы вы получите и площадь каждого кусочка. сообщив им кусочки и площадь каждого, он должен запросить новый ввод. Ломтики определяются на основе диапазонов, таких как 12 - 20 "диаметром = 8 срезов. Пользователь должен ввести в диапазоне от 12" - 36 ", или они получают сообщение об ошибке. Также, если пользователь вводит в диаметре 36, он должен показывать все остальные срезы с шагом 4, то есть 24, 20, 16, 12, 8, но если диаметр в конечном итоге попадает под 8 срезов, он должен только показывать, что, следовательно, 12 срезов покажут 8 срезов 12 ломтиков.

наконец, мы изучаем циклы, мы должны использовать цикл do while и цикл for в этом проекте.

это то, что у меня есть, и оно не работает.

        //DECLARATIONS
        double circleArea;  // area of pizza
        double diameter; // diameter of the pizza
        double areaOfSlice; // area of the slices
        double radius; // half the diameter of the pizza
        double slices = 0; // number of pizza slices
        string message = ""; // a string to hold a message to the user
        const int DIAMETER_RANGE_MASSIVE = 36;
        const int DIAMETER_RANGE_EXTRA_LARGE = 30;
        const int DIAMETER_RANGE_LARGE = 24;
        const int DIAMETER_RANGE_MED = 16;
        const int DIAMETER_RANGE_LOW = 12; // Low end on range scale for diameter
        const int SLICES_LOW_DIAMETER = 8; // number of pizza slices based on diameter
        const int SLICES_MID_DIAMETER = 12; // number of pizza slices based on diameter
        const int SLICES_HIGH_DIAMETER = 16; // number of pizza slices based on diameter
        const int SLICES_GIANT_DIAMETER = 24; // number of pizza slices based on diameter        
        bool needInput = true;
        const int END_PROGRAM = 0;




        // INPUT
        // Prompt for and get keyboard input

        Console.Write("Please enter the diameter of your pizza (0 to end program): ");  // get user to input diameter
        diameter = Convert.ToDouble(Console.ReadLine()); // read a line of text (string) from the keyboard,
        // convert that string to an double,
        // assign the resulting value to diameter

        // PROCESSING
        // determine if diameter meets requirements of 12" to 36"
        // if does not meet requirements show error message and have user enter in new diameter
        do
        {
            if (diameter < DIAMETER_RANGE_LOW || diameter > DIAMETER_RANGE_MASSIVE)

            {
                message = "\nENTRY ERROR";
                message += "\nPizza must have a diameter in the range of 12” to 36” inclusive!";
                message += "\nPlease try again.";
            }



        else {    
            needInput = false;
                // determine the number of slices based on diameter


                if (diameter >= DIAMETER_RANGE_LOW && diameter < DIAMETER_RANGE_MED)
                {
                    slices = (SLICES_LOW_DIAMETER);
                }
                else if (diameter < DIAMETER_RANGE_LARGE)
                {
                    slices = (SLICES_MID_DIAMETER);
                }
                else if (diameter < DIAMETER_RANGE_EXTRA_LARGE)
                {
                    slices = (SLICES_HIGH_DIAMETER);
                }
                else
                {
                    slices = (SLICES_GIANT_DIAMETER);
                }

                Console.Clear(); // clears console to show new output lines
                //OUTPUT
                for (int slicesAddFour = 8; slicesAddFour <=slices; slicesAddFour+=4) // for each slices
                {
                // determine the area of the slices
                radius = diameter / 2; // uses diameter to get radius
                circleArea = Math.PI * Math.Pow(radius, 2); // uses math class to calculate circle area  
                areaOfSlice = Math.Round((circleArea / slices), 2); // divides circle area by slices, takes the result of above calculation and rounds

                Console.WriteLine("\nA {0}\" Pizza diameter: {0}\".", diameter); 
                message +=("\n==============================================");
                Console.WriteLine("\nCut in {0} slices results in an area of {1}\" per slice.",areaOfSlice,slices);

                }


        } //end of else

            message = ("\nPlease enter the diameter of your pizza (0 to end program)");
            needInput = true;
        } while (diameter != END_PROGRAM && needInput);
    }
}

}

Ответы [ 3 ]

4 голосов
/ 19 октября 2011

Переместите эти две строки:

Console.Write("Please enter the diameter of your pizza (0 to end program): ");  // get user to input diameter
            diameter = Convert.ToDouble(Console.ReadLine()); // read a line of text (string) from the keyboard,

Внутри цикла do / while внутри него.

Ваш код становится:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace SOHelp
{
    class Program
    {
        static void Main(string[] args)
        {
              //DECLARATIONS
        double circleArea;  // area of pizza
        double diameter; // diameter of the pizza
        double areaOfSlice; // area of the slices
        double radius; // half the diameter of the pizza
        double slices = 0; // number of pizza slices
        string message = ""; // a string to hold a message to the user
        const int DIAMETER_RANGE_MASSIVE = 36;
        const int DIAMETER_RANGE_EXTRA_LARGE = 30;
        const int DIAMETER_RANGE_LARGE = 24;
        const int DIAMETER_RANGE_MED = 16;
        const int DIAMETER_RANGE_LOW = 12; // Low end on range scale for diameter
        const int SLICES_LOW_DIAMETER = 8; // number of pizza slices based on diameter
        const int SLICES_MID_DIAMETER = 12; // number of pizza slices based on diameter
        const int SLICES_HIGH_DIAMETER = 16; // number of pizza slices based on diameter
        const int SLICES_GIANT_DIAMETER = 24; // number of pizza slices based on diameter        
        bool needInput = true;
        const int END_PROGRAM = 0;




        // INPUT
        // Prompt for and get keyboard input


        // convert that string to an double,
        // assign the resulting value to diameter

        // PROCESSING
        // determine if diameter meets requirements of 12" to 36"
        // if does not meet requirements show error message and have user enter in new diameter
        string message = "Please enter the diameter of your pizza (0 to end program): ";

        do
        {
            Console.Write(message);  // get user to input diameter
            diameter = Convert.ToDouble(Console.ReadLine()); // read a line of text (string) from the keyboard,

            if (diameter < DIAMETER_RANGE_LOW || diameter > DIAMETER_RANGE_MASSIVE)

            {
                message = "\nENTRY ERROR";
                message += "\nPizza must have a diameter in the range of 12” to 36” inclusive!";
                message += "\nPlease try again.";
            }



        else {    
            needInput = false;
                // determine the number of slices based on diameter


                if (diameter >= DIAMETER_RANGE_LOW && diameter < DIAMETER_RANGE_MED)
                {
                    slices = (SLICES_LOW_DIAMETER);
                }
                else if (diameter < DIAMETER_RANGE_LARGE)
                {
                    slices = (SLICES_MID_DIAMETER);
                }
                else if (diameter < DIAMETER_RANGE_EXTRA_LARGE)
                {
                    slices = (SLICES_HIGH_DIAMETER);
                }
                else
                {
                    slices = (SLICES_GIANT_DIAMETER);
                }

                Console.Clear(); // clears console to show new output lines
                //OUTPUT
                for (int slicesAddFour = 8; slicesAddFour <=slices; slicesAddFour+=4) // for each slices
                {
                // determine the area of the slices
                radius = diameter / 2; // uses diameter to get radius
                circleArea = Math.PI * Math.Pow(radius, 2); // uses math class to calculate circle area  
                areaOfSlice = Math.Round((circleArea / slices), 2); // divides circle area by slices, takes the result of above calculation and rounds

                Console.WriteLine("\nA {0}\" Pizza diameter: {0}\".", diameter); 
                message +=("\n==============================================");
                Console.WriteLine("\nCut in {0} slices results in an area of {1}\" per slice.",areaOfSlice,slices);

                }


        } //end of else

            message = ("\nPlease enter the diameter of your pizza (0 to end program)");
            needInput = true;
        } while (diameter != END_PROGRAM && needInput);
    }
}
        }
4 голосов
/ 19 октября 2011

Ваша проблема в том, что вы читаете данные один раз, а затем продолжаете цикл, не получая никаких новых данных.Если вы перемещаете

Console.Write("Please enter the diameter of your pizza (0 to end program): ");  // get user to input diameter
diameter = Convert.ToDouble(Console.ReadLine()); // read a line of text (string) from the keyboard,

внутри цикла, это должно решить вашу проблему

0 голосов
/ 25 октября 2011
using System;

using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Lab6B
{
    class Program
    {
        static void Main(string[] args)
        {
            //DECLARATIONS
            double circleArea;  // area of pizza
            double diameter; // diameter of the pizza
            double areaOfSlice; // area of the slices
            double radius; // half the diameter of the pizza
            double slices = 0; // number of pizza slices
            const int INPUT_MAX = 36; // maximum entry for diameter
            const int DIAMETER_RANGE_EXTRA_LARGE = 30; // diameter range used to figure out slices
            const int DIAMETER_RANGE_LARGE = 24; // diameter range used to figure out slices
            const int DIAMETER_RANGE_MED = 16; // diameter range used to figure out slices
            const int INPUT_MIN = 12; // minimum entry for diameter
            const int SLICES_LOW_DIAMETER = 8; // number of pizza slices based on diameter
            const int SLICES_MID_DIAMETER = 12; // number of pizza slices based on diameter
            const int SLICES_HIGH_DIAMETER = 16; // number of pizza slices based on diameter
            const int SLICES_GIANT_DIAMETER = 24; // number of pizza slices based on diameter        
            bool needInput = true; // does the program need input true or false
            const int END_PROGRAM = 0; // 0 ends the program





            // INPUT
            // Prompt for and get keyboard input

            Console.Write("Please enter the diameter of your pizza: ");  // get user to input diameter
            diameter = Convert.ToDouble(Console.ReadLine()); // read a line of text (string) from the keyboard, 

            // convert that string to an double,
            // assign the resulting value to diameter

            while (diameter != END_PROGRAM && needInput) // Begin while loop

            {

                // PROCESSING

                // determine if diameter meets requirements of 12" to 36"
                // if does not meet requirements show error message and have user enter in new diameter


                if (diameter < INPUT_MIN || diameter > INPUT_MAX)
                {

                    Console.WriteLine( "\nENTRY ERROR\nPizza must have a diameter in the range of 12” to 36” inclusive!\nPlease try again.");
                }


                else
                {
                    needInput = false;
                    // determine the number of slices based on diameter


                    if (diameter < DIAMETER_RANGE_MED)
                    {
                        slices = (SLICES_LOW_DIAMETER);
                    }
                    else if (diameter < DIAMETER_RANGE_LARGE)
                    {
                        slices = (SLICES_MID_DIAMETER);
                    }
                    else if (diameter < DIAMETER_RANGE_EXTRA_LARGE)
                    {
                        slices = (SLICES_HIGH_DIAMETER);
                    }
                    else
                    {
                        slices = (SLICES_GIANT_DIAMETER);
                    }

                    Console.Clear(); // clears console to show new output lines

                    //OUTPUT

                    Console.WriteLine("\nA {0}\" Pizza diameter: {0}\".", diameter);
                    Console.WriteLine("\n==============================================");

                    for (int slicesAddFour = 8; slicesAddFour <= slices; slicesAddFour += 4) // for each slices
                    {
                        // determine the area of the slices
                        radius = diameter / 2; // uses diameter to get radius
                        circleArea = Math.PI * Math.Pow(radius, 2); // uses math class to calculate circle area  
                        areaOfSlice = Math.Round((circleArea / slicesAddFour), 2); // divides circle area by slices, takes the result of above calculation and rounds


                        Console.WriteLine("\nCut in {0} slices results in an area of {1}\" per slice.", slicesAddFour, areaOfSlice);


                    }


                } //end of else

                Console.Write("\nPlease enter the diameter of your pizza (0 to exit): ");
                diameter = Convert.ToDouble(Console.ReadLine());
                Console.Clear(); // clears console to show new output lines

                // set the need input value back to true for new entry
                needInput = true;

             } // end of while loop
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...