Как заставить пользователя сделать другой выбор при выборе фильма?

Я пишу программу, в которой у пользователя есть выбор из 7 фильмов для покупки. Пользователь может выбрать до 7 фильмов, а затем сложить цены фильмов и распечатать общую стоимость. Я должен использовать массивы в своей программе. Моя проблема в том, что когда пользователь уже выбрал свой первый фильм, ему предоставляется выбор, хотят ли они купить другой фильм. Я запутался в том, как я должен кодировать свою программу, предоставляя пользователю еще один выбор для выбора более одного фильма. Мне нужна помощь в том, как мне решить мою проблему, потому что, когда я запускаю свою программу, она не дает мне возможности выбрать другой фильм. Вот мой код:

import java.util.Scanner;
public class MovieHits {

public static void main(String[] args) 
{
    //Declare Variables
    Scanner keyboard = new Scanner(System.in);
    int userChoice = 0;
    String choice;
    int priceTotal = 0;
    int [] number = {1, 2, 3, 4, 5, 6, 7};

    String [] Movie = new String [7];
    int [] movieCost ={ 5, 4, 3, 6, 4, 4, 3}; 

    Movie [0] = "Iron Man";
    Movie [1] = "Transformers";
    Movie [2] = "Godzilla";
    Movie [3] = "Fast and Furious";
    Movie [4] = "Captain America";
    Movie [5] = "X Men";
    Movie [6] = "Rio";

    //Welcome the user
    System.out.println("Hello, Welcome to TC Movies OnDemand.");

    //Display the listed movies so the user can know with movie they want to watch
    System.out.println("\nChoose which movie you want to watch: ");
    for ( int index = 0; index < 7; index = index + 1 ) 
    {
        System.out.println(number[index]+ ": " +  Movie[index]); 
        System.out.println("\t" + "Price: $" + movieCost[index]);
    }


    //Switch Statement to give user a menu to choose a movie
    userChoice = keyboard.nextInt();

    switch (userChoice)
    {
    case 1: 
        System.out.println("The movie you have chosen is " + Movie[0] + "\nPrice is: " + "$" + movieCost[0]);
        break;

    case 2:
        System.out.println("The movie you have chosen is " + Movie[1] + "\nPrice is: " + "$" + movieCost[1]);
        break;

    case 3:
        System.out.println("The movie you have chosen is " + Movie[2] + "\nPrice is: " + "$" +  movieCost[2]);
        break;

    case 4:
        System.out.println("The movie you have chosen is " + Movie[3] + "\nPrice is: " + "$" + movieCost[3]);
        break;

    case 5:
        System.out.println("The movie you have chosen is " + Movie[4] + "\nPrice is: " + "$" + movieCost[4]);
        break;

    case 6:
        System.out.println("The movie you have chosen is " + Movie[5] + "\nPrice is: " + "$" + movieCost[5]);
        break;

    case 7:
        System.out.println("The movie you have chosen is " + Movie[6] + "\nPrice is: " + "$" + movieCost[6]);
        break;
    default:
        System.out.println("I'm Sorry you did not chose a movie.");
        break;
    }


    //Tell the user if they want to get another movie
    System.out.println("Do you want to add another movie. Enter Yes or No");
    choice = keyboard.next();

    do 
    {
        priceTotal = movieCost[userChoice];

    }
    while (choice.equalsIgnoreCase("Yes"));
    {

    }
    //Tell the user the total price 




}

}


person TollesonC    schedule 04.05.2014    source источник
comment
петля do-while находится не в том месте   -  person arunmoezhi    schedule 04.05.2014
comment
поставить do { перед userChoice = keyboard.nextInt();.   -  person Braj    schedule 04.05.2014


Ответы (3)


Я бы очистил ваш код следующим образом:

String choice = "Yes"; //Set to yes by default.
//Welcome the user
System.out.println("Hello, Welcome to TC Movies OnDemand.");

while(choice.equalsIgnoreCase("Yes")){
//Display the listed movies so the user can know with movie they want to watch
System.out.println("\nChoose which movie you want to watch: ");
for ( int index = 0; index < 7; index = index + 1 ){
    System.out.println(number[index]+ ": " +  Movie[index]); 
    System.out.println("\t" + "Price: $" + movieCost[index]);
}

userChoice = keyboard.nextInt();

try{
    System.out.println("The movie you have chosen is " + Movie[userChoice] + "\nPrice is: " + "$" + movieCost[userChoice]);
}catch(Exception e){
    System.out.println("Sorry, you did not choose a movie.");
}

//Tell the user if they want to get another movie
System.out.println("Do you want to add another movie? Enter Yes or No.");
choice = keyboard.next();

}

Это реорганизует ваш код, а это означает, что вам не нужно использовать длинный оператор switch для каждого отдельного типа фильмов, который у вас есть.

Мы использовали userChoice в качестве фактического индекса для поиска, а блок try{}catch{} означает, что мы по-прежнему можем «поймать» неверный ввод, если пользователь неправильно вводит фильм для просмотра.

Первоначально я использовал do-while, как и вы, но эта структура никогда не работала для меня, поэтому я заменил ее на прямолинейный цикл while, с которым я более знаком.

person Singular1ty    schedule 04.05.2014
comment
@KickButtowski Как так? - person Singular1ty; 04.05.2014
comment
когда я запускаю его, он просто спрашивает один раз, и программа завершается :) - person Kick Buttowski; 04.05.2014
comment
Ах! Вот что я получаю за использование структуры данных, которую никогда не использую в реальной жизни. Редактирую... сейчас. - person Singular1ty; 04.05.2014
comment
это k, но у вас все та же проблема. :) - person Kick Buttowski; 04.05.2014
comment
@KickButtowski, не знаю, в чем проблема. Я запустил этот код на своей машине, и он работает до тех пор, пока вы не скажете ему ничего, кроме слова «да». Вам нужно иметь там исходный код ОП и вставить мой код в его тело, убедившись, что choice имеет начальное значение Да. - person Singular1ty; 04.05.2014
comment
вы должны изменить сообщение в своем блоке catch на что-то более полезное, например, количество фильмов не более семи или что-то в этом роде. Всего один балл к вашему потрясающему ответу. - person Kick Buttowski; 04.05.2014

Вы должны использовать цикл do-while следующим образом:

  • In the do block, put the code that you would like to happen
    • This should be everything between (and including) "Choose the movie" and retrieving user's choice for repetition.
    • Это означает, что весь этот код гарантированно появится один раз и будет повторяться, если выполняется условие while.
  • Блок кода для условия while находится над ним и, таким образом, заканчивается точкой с запятой.
person Neurax    schedule 04.05.2014

person    schedule
comment
Спасибо, братан, я попытаюсь исправить мою программу и посмотреть, что я получу, спасибо за совет. - person TollesonC; 04.05.2014
comment
Теперь у меня есть другая проблема, когда я ввожу «да» для выбора другого фильма, он перепечатывает тот же тест, который я получил для моего первого выбора. - person TollesonC; 04.05.2014