Как мне написать строку, прежде чем подсказывать в цикле while? - PullRequest
0 голосов
/ 17 января 2012

Моя программа собирает количество бутылок, собранных четырьмя комнатами. Когда пользователь вводит команду quit в любое время, программа выходит из вида и показывает результат сбора бутылок. Затем он рассчитывает выигрышную комнату с наибольшим количеством бутылок.

У меня есть цикл while. Я не понимаю, почему я не могу войти в него. Чтобы войти в цикл while, мне будет предложено ввести число 1-4, как используется в моем массиве, и количество бутылок, собранных в каждой комнате. Если я в любое время введу команду quit, программа прекратит запись бутылок и выложит результат и комнату с наибольшим количеством бутылок.

Как я могу получить «Введите номер комнаты, в которой вы находитесь», чтобы показываться первым, прежде чем я введу количество бутылок? Моя проблема существует в getBottles ()

Я думаю, что эту строку нельзя использовать в массиве, я прав?

комнаты [комната - 1] + = int.Parse (Console.ReadLine ());

namespace BottleDrive
{
    class BottleDrive
    {
        public int[] rooms;
        public BottleDrive()
        {
            rooms = new int[4];
        }

        static void Main(string[] args) //static is member of class not object
        {
            BottleDrive bD = new BottleDrive();
            bD.getBottles();
            bD.displayBottleCount();
            bD.findWinner();
        }
        public void getBottles()
        {
            string quit = Console.ReadLine();
            while while(quit != "quit")
            {
                int room = int.Parse(quit);

                Console.Write("Bottles collected in room {0}: ", room);
                rooms[room - 1] += int.Parse(Console.ReadLine());

                Console.Write("Enter the room you're in: ");
            }
        }
        public void findWinner()
        {
            int maxValue = 0;//initiates the winner, contructor starts at 0
            int maxRoomNumber = 0;//initiates the room number that wins
            for (int i = 0; i < rooms.Length; ++i)//This loop goes through the array of rooms (4)
            {
                if (rooms[i] > maxValue)//Makes sure that the maxValue is picked in the array
                {//Looking for room number for the 
                    maxValue = rooms[i];
                    maxRoomNumber = i + 1;
                }
            }
            Console.WriteLine("And the Winner is room " + maxRoomNumber + "!!!");
        }
        public void displayBottleCount()
        {
            Console.WriteLine("Bottles collected in room one: " + rooms[0]);
            Console.WriteLine("Bottles collected in room two: " + rooms[1]);
            Console.WriteLine("Bottles collected in room three: " + rooms[2]);
            Console.WriteLine("Bottles collected in room four: " + rooms[3]);
        }
    }
}

Ответы [ 5 ]

4 голосов
/ 17 января 2012
while (quit == "quit")

Приведенная выше строка будет запускать цикл только в том случае, если quit (то, что вы получили из консоли) имеет значение «quit».

Вы хотите:

while (quit != "quit")

или

while (!quit.Equals("quit"))

В конце концов, несмотря на то, что вы фактически не обновляете quit внутри своего цикла, вы не сможете выйти из него.

Вам нужно будет захватить вашу консоль."quit".

Возможно, вы также захотите взглянуть на int.TryParse на случай, если люди введут строку, которая не является quit или допустимым целым числом.TryParse сообщит вам, был ли анализ успешным или нет, вместо того, чтобы выдавать исключение.

3 голосов
/ 17 января 2012

Эта строка:

while (quit == "quit")

должна быть на самом деле:

while (quit != "quit")

Или еще лучше:

while (!quit.Equals("quit", StringComparison.CurrentCultureIgnoreCase))

, которая будет игнорировать регистр для ввода.Как уже отмечали другие, в вашем цикле больше проблем.Попробуйте использовать это для функции getBottles:

public void getBottles()
{
    string input;

    do
    {
        Console.Write("Enter the room you're in: (or quit)");
        input = Console.ReadLine();

        int room;
        // doing try parst because the input might be "quit" or other junk
        if (int.TryParse(input, out room))
        {
            Console.Write("Bottles collected in room {0}: ", room);
            // this will fail hard if the input is not of type int
            rooms[room - 1] += int.Parse(Console.ReadLine());
        }
    } while (!input.Equals("quit", StringComparison.CurrentCultureIgnoreCase)); 
}
1 голос
/ 17 января 2012

Может быть, у вас есть while(quit != "quit") для условия while?

0 голосов
/ 17 января 2012

Функция getBottles () выглядит очень странно. Вы входите в цикл while только тогда, когда набираете «quit». Я не думаю, что это поведение, которое вы хотите.

0 голосов
/ 17 января 2012

Попробуйте:

while (!quit.Equals("quit"))
...