java - 座位定位器 - 3D 数组 (Java)

标签 java arrays

我基本上得到了要显示的 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

您一次又一次地使用相同的变量名称。一旦您使用变量 g , rc作为循环变量,您可以删除它们以前的值,即用户输入的值。您应该为循环使用不同的变量。

问题2

您有两个嵌套循环( for gfor r )。里面for r你有一个循环,用值填充座位 - 所有 c当前的单元格gr 。由于第一轮都是0,所以这只是填补了0个席位。

然后,在座位填满后,您将再次具有相同循环变量的循环。循环完成它们需要做的事情——打印座位。但现阶段座位数全部为零。这就是您得到的输出。

但是因为您使用了相同的循环变量,变量 c , rg已达到最大值 (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 之后导致第二组循环包含在第一组循环中。第二个实际上并不是创建循环 block 。您可能认为您正在关闭您的区 block ,但实际上您正在打开一个新区 block 。

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

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

我用┈┈┈标记的部分都在for r里面环形。我用╺╺╺╺标记的部分只是一个独立的 block ,它实际上位于for r下。 ,而不是 for c循环,因为它没有连接到 ()for .

解决这个问题的方法是始终输入 { for()之后。如果你总是输入{之后for , while , ifelse ,即使只有一行,你也会避免很多麻烦,因为编译器会告诉你是否缺少大括号,而且如果你决定向其中一个循环添加一些内容,你将不会得到命令您认为在循环内部,或者 if 和 实际上在循环外部。

问题4

没有理由输入 g*r*c座位内。你想把 1在适当的座位上,就这样做。

结论:

  • 不要对用户输入和循环变量使用相同的变量名称。调用用户变量userSection , userRow , userNumber和循环变量 section , rownumber例如。
  • 注意有一个{每次之后 for()然后你把}在适当的地方。
  • 您实际上并没有输入 1在那里任何地方。

关于java - 座位定位器 - 3D 数组 (Java),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26871174/

相关文章:

java - 使用 Arrays.sort() 对并行数组进行排序

java - Spring hibernate 直到结束才提交

java - 记录从无法进一步修改的 Web 服务收到的响应

javascript - 将 HTML 代码更改为 json_encode

arrays - Ecto 查询 Postgres JSON 数组的值

C++ 数组与 vector

java - 卡夫卡消费者使用哪种语言

java - hibernate createQuery错误?

Java 有界类型

ruby 对两个数组进行排序