繁体   English   中英

座位定位器-3D阵列(Java)

[英]Seat Locator - 3D Arrays (Java)

我基本上可以显示3维数组,但是现在我很难让用户输入对应于程序并找到座位(将0替换为1)。 有人可以给我提示我应该做什么吗? 这是我的代码。

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();
    }
        }
}}

并输出:

Enter the ticket section: 1

Enter the ticket row: 1 

Enter the ticket number: 1 

0000000000 

0000000000

0000000000

首先,您应该使用IDE并正确设置代码格式。 正确的缩进对于理解代码中的某些问题非常重要。

问题1

您一次又一次使用相同的变量名。 一旦将变量grc用作循环变量,便会擦除其先前的值,即用户输入的值。 您应该为循环使用不同的变量。

问题2

您有两个嵌套循环( for gfor r )。 for r您有一个循环,用值填充席位-当前gr所有c单元格。 由于它们在第一轮都为0,因此只会在座位上填充0。

然后,在座席装满后,您将再次使用相同的循环变量进行循环 循环执行他们需要做的事情-打印座位。 但是现阶段的席位全为零。 这就是您得到的输出。

但是,因为使用了相同的循环变量 ,所以变量crg已达到其最大值(3,10,10)。 这意味着将不再执行外循环。

切勿在具有相同变量的循环内使用循环。

问题3

此问题与先前的问题有关。 这是正确的缩进和格式设置对您有帮助的地方。 这部分:

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 r之后的第一个循环导致第二个循环集包含在第一个循环中。 第二个实际上没有创建循环块。 您可能以为您要关闭区块,但实际上是在打开一个新区块。

这些是具有正确格式的循环:

    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();
        ┆   }
        }

我用marked标记的部分都在for r循环中。 我用marked标记的部分只是一个独立的块,它实际上在for r ,而不在for c循环下,因为它没有连接到for()

解决方案是始终将{放在for() 如果您总是将{放在forwhileifelse后面,即使只有一行,您也会避免很多麻烦,因为编译器会告诉您是否缺少括号,以及是否决定添加对于其中一个循环,您将不会获得您认为在循环内或实际上在循环外的命令。

问题4

没有理由将g*r*c放在座椅内。 您想将1放置在适当的座位上,然后这样做。

结论:

  • 用户输入和循环变量不要使用相同的变量名。 调用用户变量userSectionuserRowuserNumber和循环变量sectionrownumber
  • 请注意在每个for()加上{ ,并将}放在正确的位置。
  • 您实际上并没有在其中放置1

您可以摆脱带有偏移的3D阵列,然后获得一个尺寸并计算位置。 您知道一排有多少个座位,一排有多少个座位。 嵌套循环是不可调试的。 考虑使用计算的偏移量。 或写一些容器或类来保存数据。

类节以保存节数据

类行以保存行数据

用于保存座位数据的Class Seat(然后您可以访问两个以上的州)

和部分将举行几行,每行将容纳一些席位。 然后,您可以要求部门为您提供一些座位信息。 像Fasade模式。 Java是目标语言,请利用它。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM