我基本上得到了要显示的 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
你有一个循环,用值填充座位 - 所有 c
当前的单元格g
和r
。由于第一轮都是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
之后导致第二组循环包含在第一组循环中。第二个实际上并不是创建循环 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
, if
和else
,即使只有一行,你也会避免很多麻烦,因为编译器会告诉你是否缺少大括号,而且如果你决定向其中一个循环添加一些内容,你将不会得到命令您认为在循环内部,或者 if 和 实际上在循环外部。
问题4
没有理由输入 g*r*c
座位内。你想把 1
在适当的座位上,就这样做。
结论:
- 不要对用户输入和循环变量使用相同的变量名称。调用用户变量
userSection
,userRow
,userNumber
和循环变量section
,row
和number
例如。 - 注意有一个
{
每次之后for()
然后你把}
在适当的地方。 - 您实际上并没有输入
1
在那里任何地方。
关于java - 座位定位器 - 3D 数组 (Java),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26871174/