Localisateur de siège-Tableaux 3D (Java)


J'ai essentiellement obtenu le tableau 3 dimensions à afficher, mais maintenant j'ai du mal à faire correspondre l'entrée utilisateur au programme et à trouver le siège (en remplaçant le 0 spécifique à un 1). Quelqu'un pourrait-il me donner un indice de ce que je suis censé faire? Voici mon code.

import java.util.Scanner;
public class TicketSeller {

//name

public static void main(String[] args) {

     Scanner keyboard = new Scanner(System.in);
    int seating[][][] = new int[3][10][10];
    int g,r,c;

    System.out.print("Enter the ticket section: ");
    g = keyboard.nextInt();

    System.out.print("Enter the ticket row: ");
    r = keyboard.nextInt();

    System.out.print("Enter the ticket number: ");
    c = keyboard.nextInt();


    for( g = 0; g<3; g++)
        for(r=0; r<10; r++){
            for(c=0; c<10; c++)
                seating[g][r][c]= g*r*c;
    {
        for( g = 0; g<3; g++)
            for(r=0; r<10; r++){
                for(c=0; c<10; c++)

    {   

        System.out.print(seating[g][r][c]);     
    }
        System.out.println();
    }
        System.out.println();
    }
        }
}}

Et sortie:

Enter the ticket section: 1

Enter the ticket row: 1 

Enter the ticket number: 1 

0000000000 

0000000000

0000000000
Author: Jean-François Corbett, 2014-11-11

2 answers

Tout d'abord, vous devez utiliser votreE et formater le code correctement. Une indentation appropriée est très importante pour comprendre certains des problèmes de votre code.

Problème 1

, Vous utilisez les mêmes noms de variables, encore et encore. Dès que vous utilisez les variables g,r et c en tant que variables de boucle, vous effacez leurs valeurs précédentes, qui étaient ce que l'utilisateur a entré. Vous devez utiliser différentes variables pour les boucles.

Problème 2

, Vous avez deux boucles imbriquées (for g et for r). À l'intérieur du for r, vous avez une boucle qui remplit les sièges avec des valeurs - toutes les cellules c pour les g et r actuels. Comme ils sont tous 0 au premier tour, cela remplit simplement 0 dans les sièges.

Ensuite, une fois les sièges remplis, vous avez à nouveaudes boucles avec les mêmes variables de boucle . Les boucles font ce qu'elles doivent faire - elles impriment les sièges. Mais les sièges à ce stade sont tous nuls. Et c'est la sortie que vous obtenez.

, Mais parce que vous avez utilisé les mêmes variables de boucle, les variables c,r et g ont atteint leurs valeurs maximales (3,10,10). Cela signifie que la boucle externe ne sera plus effectuée.

N'utilisez jamais de boucles à l'intérieur de boucles avec les mêmes variables.

Problème 3

Ce problème est lié au problème précédent. Et c'est là que l'indentation et le formatage appropriés vous auraient aidé. Ce partie:

for( g = 0; g<3; g++)
    for(r=0; r<10; r++){
        for(c=0; c<10; c++)
            seating[g][r][c]= g*r*c;
{

Les deux { ici ne devraient pas être ici. Le premier, juste après le for r provoque l'inclusion du deuxième ensemble de boucles dans le premier. Le second ne crée pas réellement un bloc de boucle. Vous pensiez probablement fermer votre bloc, mais vous ouvriez en fait un nouveau bloc.

Ce sont vos boucles avec un formatage approprié:

    for (g = 0; g < 3; g++)
        for (r = 0; r < 10; r++) {
        ┆   for (c = 0; c < 10; c++)
        ┆       seating[g][r][c] = g * r * c;
        ┆   {
        ┆   ╻  for (g = 0; g < 3; g++)
        ┆   ╻       for (r = 0; r < 10; r++) {
        ┆   ╻           for (c = 0; c < 10; c++) {
        ┆   ╻               System.out.print(seating[g][r][c]);
        ┆   ╻           }
        ┆   ╻           System.out.println();
        ┆   ╻       }
        ┆   ╻   System.out.println();
        ┆   }
        }

La partie que j'ai marquée avec ┈ ┈ ┈ est toute à l'intérieur de la boucle for r. La partie que j'ai marquée avec is est juste un bloc indépendant et il est en fait sous le for r, pas la boucle for c, car il n'est pas connecté au () d'un for.

La solution à cela est de toujours mettre { après l'for(). Si vous mettez toujours { après for, while, if et else, même si il y a une seule ligne, vous éviterez beaucoup de problèmes parce que le compilateur va vous dire si vous avez manque une accolade, et aussi si vous décidez d'ajouter quelque chose à l'une des boucles, vous n'obtiendrez pas les commandes qui vous pensiez à l'intérieur de votre boucle ou si et sont en fait à l'extérieur.

Problème 4

Il n'y a aucune raison de mettre g*r*c à l'intérieur des sièges. Vous vouliez mettre 1 dans le siège approprié, faites exactement cela.

En conclusion:

  • N'utilisez pas les mêmes noms de variables pour les entrées utilisateur et les variables de boucle. Appeler les variables utilisateur userSection, userRow, userNumber et les variables de boucle section, row et number, par exemple.
  • Prendre prenez soin d'avoir un { après chaque for() et que vous mettiez le } au bon endroit.
  • Vous n'avez mis un 1 là-dedans nulle part.
 1
Author: RealSkeptic, 2014-11-11 18:46:26

Vous pouvez vous débarrasser du tableau 3D avec des décalages, alors vous avez une dimension et vous calculez la position. Vous savez combien de sièges sont en rangée et combien de rangées sont en section. Les boucles imbriquées sont indébranlables. Envisagez d'utiliser des décalages calculés. Ou écrivez un conteneur ou une classe pour contenir des données.

Section de classe pour contenir les données de section

Classe Row pour contenir les données de ligne

Class Seat pour contenir les données de siège (vous pouvez alors adresser plus de deux états)

Et la section contiendra plusieurs rangées, chaque rangée tiendra quelques sièges. Ensuite, vous pouvez demander à la section de vous donner des informations sur un siège. Comme le motif Fasade. Java est un langage objectif, profitez-en.

 0
Author: Preetygeek, 2014-11-11 19:14:27