[英]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
您一次又一次使用相同的变量名。 一旦将变量g
, r
和c
用作循环变量,便会擦除其先前的值,即用户输入的值。 您应该为循环使用不同的变量。
问题2
您有两个嵌套循环( for g
和for r
)。 在for r
您有一个循环,用值填充席位-当前g
和r
所有c
单元格。 由于它们在第一轮都为0,因此只会在座位上填充0。
然后,在座席装满后,您将再次使用相同的循环变量进行循环 。 循环执行他们需要做的事情-打印座位。 但是现阶段的席位全为零。 这就是您得到的输出。
但是,因为使用了相同的循环变量 ,所以变量c
, r
和g
已达到其最大值(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()
。 如果您总是将{
放在for
, while
, if
和else
后面,即使只有一行,您也会避免很多麻烦,因为编译器会告诉您是否缺少括号,以及是否决定添加对于其中一个循环,您将不会获得您认为在循环内或实际上在循环外的命令。
问题4
没有理由将g*r*c
放在座椅内。 您想将1
放置在适当的座位上,然后这样做。
结论:
userSection
, userRow
, userNumber
和循环变量section
, row
和number
。 for()
加上{
,并将}
放在正确的位置。 1
。 您可以摆脱带有偏移的3D阵列,然后获得一个尺寸并计算位置。 您知道一排有多少个座位,一排有多少个座位。 嵌套循环是不可调试的。 考虑使用计算的偏移量。 或写一些容器或类来保存数据。
类节以保存节数据
类行以保存行数据
用于保存座位数据的Class Seat(然后您可以访问两个以上的州)
和部分将举行几行,每行将容纳一些席位。 然后,您可以要求部门为您提供一些座位信息。 像Fasade模式。 Java是目标语言,请利用它。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.