Как правильно вложить циклы

#java #arrays #loops #if-statement

#java #массивы #циклы #if-оператор

Вопрос:

мне трудно понять, почему, когда я запускаю свой код, он пропускает все операторы if и просто ставит invalid. у меня есть 2d массив со значениями, который представляет кинотеатр, и я должен продавать билеты, пользователь должен ввести сумму денег, которая определяет, где они будут сидеть, это самое дорогое место, которое они могли бы себе позволить из выбранного. место, которое получает пользователь, должно измениться с любого числа на 0. в конце мне нужно распечатать новый массив с нулями.

это то, что я пробовал:

 public static void main(String[] args) {

    Scanner in = new Scanner (System.in);
    boolean done = false;
        //initial seating chart
    int [] [] table = 
        {
            {10, 10, 10, 10, 10, 10, 10, 10, 10, 10},
            {10, 10, 10, 10, 10, 10, 10, 10, 10, 10},
            {10, 10, 10, 10, 10, 10, 10, 10, 10, 10},
            {20, 20, 20, 20, 20, 20, 20, 20, 20, 20},
            {20, 20, 20, 20, 20, 20, 20, 20, 20, 20},
            {30, 30, 30, 30, 30, 30, 30, 30, 30, 30},
            {40, 40, 40, 40, 40, 40, 40, 40, 40, 40},
            {40, 40, 40, 40, 40, 40, 40, 40, 40, 40},
            {50, 50, 50, 50, 50, 50, 50, 50, 50, 50},
        };
    while (!done) {
        int row; int col;
        //search seating chart
        for (row=0; row<9; row  ) {
            for (col=0; col<8; col  ) {
                System.out.printf("Enter maximum amount that you would like to spend on the tickets: ");
                int amount = in.nextInt();
                if (table[row][col]==10 amp;amp; 10<=amount amp;amp; amount<20) {
                table[row][col]=0;
                    System.out.printf("Ticket located at Row %d Seat %d purchased for 10n", row 1, col 1);
                    System.out.print("Would you like to purchase additional tickets? (Y/N) "   in.next());
                    if (in.hasNext("y")) {
                        done = false;
                    }
                    else {done = true;
                    }
                    }
                else if (table[row][col]==20 amp;amp; 20<=amount amp;amp; amount<30) {
                    table[row][col]=0;
                    System.out.printf("Ticket located at Row %d Seat %d purchased for 20n", row 1, col 1);
                    System.out.print("Would you like to purchase additional tickets? (Y/N) "   in.next());
                    if (in.hasNext("y")) {
                        done = false;
                    }
                    else {done = true;
                    }
                    }
                else if (table[row][col]==30 amp;amp; 30<=amount amp;amp; amount<40) {
                    table[row][col]=0;
                    System.out.printf("Ticket located at Row %d Seat %d purchased for 30n", row 1, col 1);
                    System.out.print("Would you like to purchase additional tickets? (Y/N) "   in.next());
                    if (in.hasNext("y")) {
                        done = false;
                    }
                    else {done = true;
                    }
                    }
                else if (table[row][col]==40 amp;amp; 40<=amount amp;amp; amount<50) {
                    table[row][col]=0;
                    System.out.printf("Ticket located at Row %d Seat %d purchased for 40n", row 1, col 1);
                    System.out.print("Would you like to purchase additional tickets? (Y/N) "   in.next());
                    if (in.hasNext("y")) {
                        done = false;
                    }
                    else {
                        done = true;
                    }
                    }
                else if (table[row][col]==50 amp;amp; 50<=amount) {
                    table[row][col]=0;
                    System.out.printf("Ticket located at Row %d Seat %d purchased for 50n", row 1, col 1);
                    System.out.print("Would you like to purchase additional tickets? (Y/N) "   in.next());
                    if (in.hasNext("y")) {
                        done = false;
                    }
                    else {done = true;
                    }
                    }
                else {System.out.print("invalid");}
        }}}
        //final seating chart
        System.out.print(table);
}
}
  

Комментарии:

1. JavaScript и Java — это два разных языка программирования.

2. Спасибо. не могли бы вы помочь мне, несмотря на это?

3. ваш цикл через 2 цикла for излишен, клиенту должно быть чрезвычайно повезло, чтобы получить место, где строка и col находятся в ценовом диапазоне, в котором он хочет сидеть, как в начале, если я выбираю 45 -> затем я попадаю в 3-й else if, но в этот момент таблица [0] [0] находится на 10, поэтому он терпит неудачу.. я готовлю пример кода, который объяснил бы лучше

Ответ №1:

вот пример для лучшего понимания, я рассматриваю здесь один случай, поскольку остальные в значительной степени одинаковы

 //private variable here so we could find and book seat through method findAvailableSeat()
private static int[][] table = { { 10, 10, 10, 10, 10, 10, 10, 10, 10, 10 }, { 10, 10, 10, 10, 10, 10, 10, 10, 10, 10 },
        { 10, 10, 10, 10, 10, 10, 10, 10, 10, 10 }, { 20, 20, 20, 20, 20, 20, 20, 20, 20, 20 },
        { 20, 20, 20, 20, 20, 20, 20, 20, 20, 20 }, { 30, 30, 30, 30, 30, 30, 30, 30, 30, 30 },
        { 40, 40, 40, 40, 40, 40, 40, 40, 40, 40 }, { 40, 40, 40, 40, 40, 40, 40, 40, 40, 40 },
        { 50, 50, 50, 50, 50, 50, 50, 50, 50, 50 }, };
public static void main(String[] args) {

    Scanner in = new Scanner(System.in);
    boolean done = false;
    // initial seating chart

    while (!done) {
        int row;
        int col;
        // search seating chart
        System.out.printf("Enter maximum amount that you would like to spend on the tickets: ");
        int amount = in.nextInt();
        if (10 <= amount amp;amp; amount < 20) {
            String location = findAvailableSeat(10);//store the indexes in a variable to show the user later
            if(location != null) {
                String[] locationList = location.split(",");
                row = Integer.parseInt(locationList[0]);
                col = Integer.parseInt(locationList[1]);
                System.out.printf("Ticket located at Row %d Seat %d purchased for 10n", row   1, col   1);
                System.out.print("Would you like to purchase additional tickets? (Y/N) ");
                String resp = in.next(); //this statement is needed as sometimes with in.next() rushes to user input without printing text
                if (resp.equals("Y")) {
                    done = false;
                } else {
                    done = true;
                }
            }
            else 
                System.out.printf("No available seat foundn");
        }
    }
}
  

и в методе мы имеем

 private static String findAvailableSeat(int i) {
    // TODO Auto-generated method stub
    for (int row=0; row<9; row  ) {
        for (int col=0; col<8; col  ) {
            if(table[row][col]==i) {
                //find the seat location, set location to 0 and then return indices to show in user result
                table[row][col] = 0;
                return row   ","   col;
            }
        }
    }
    return null;
}