Как правильно вкладывать петли - PullRequest
1 голос
/ 25 марта 2019

Мне трудно понять, почему, когда я запускаю свой код, он пропускает все операторы if и просто ставит недействительным. у меня есть двумерный массив со значениями, который представляет кинотеатр, и я должен продавать билеты, пользователь должен ввести сумму денег, которая определяет, где он будет сидеть, что является самым дорогим местом, которое он может себе позволить выбор. место, которое получает человек, должно измениться с любого числа на 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 && 10<=amount && amount<20) {
                table[row][col]=0;
                    System.out.printf("Ticket located at Row %d Seat %d purchased for 10\n", 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 && 20<=amount && amount<30) {
                    table[row][col]=0;
                    System.out.printf("Ticket located at Row %d Seat %d purchased for 20\n", 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 && 30<=amount && amount<40) {
                    table[row][col]=0;
                    System.out.printf("Ticket located at Row %d Seat %d purchased for 30\n", 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 && 40<=amount && amount<50) {
                    table[row][col]=0;
                    System.out.printf("Ticket located at Row %d Seat %d purchased for 40\n", 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 && 50<=amount) {
                    table[row][col]=0;
                    System.out.printf("Ticket located at Row %d Seat %d purchased for 50\n", 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 Ответ

0 голосов
/ 25 марта 2019

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

//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 && 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 10\n", 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 found\n");
        }
    }
}

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

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;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...