如何在 Java 的嵌套 for 循环中用字母递增一个值?
How do I increment a value with letters in a nested for loop in Java?
我是学校的初级 Java 学生,我在教科书计划中遇到了挑战 activity,我使用的是 zybooks.com 的教科书,并且在这个特定的 activity 中,我只能更改程序允许我更改的代码。另外,由于我在教科书上的位置,我只能使用简单的东西,比如循环和 if 语句。这是 activity,
的确切方向
给定 numRows 和 numColumns,打印剧院所有座位的列表。行有编号,列有字母,如 1A 或 3E。在每个座位后打印一个 space,包括在最后一个座位后。使用单独的打印语句打印行和列。例如:numRows = 2 和 numColumns = 3 打印:1A 1B 1C 2A 2B 2C。
所以,我目前坚持的是将列逐步打印为字母。现在我得到 1A 2A 3A 等等,而我想要的是 1A 1B 1C 2A 2B 2C> 如何用字母递增该列行?
此外,程序不应该 运行 当没有列输入时,但我的程序将打印出行和列,这也不是我想要的。例如,numRows = 3 和 numColumns = 0,该程序不应打印任何内容,但实际情况是该程序将仅打印出像 123 这样的行。如何让程序不 运行 如果没有列输入?
这是我的代码
import java.util.Scanner;
public class NestedLoops {
public static void main (String [] args) {
Scanner scnr = new Scanner(System.in);
int numRows;
int numColumns;
int currentRow;
int currentColumn;
char currentColumnLetter;
numRows = scnr.nextInt();
numColumns = scnr.nextInt();
//what the text book allows me edit
for(currentRow = 1; currentRow <= numRows; ++currentRow){
System.out.print(currentRow);
currentColumnLetter = 'A';
for(currentColumn = 1; currentColumn <= numColumns; ++currentColumn){
currentColumn = currentColumnLetter;
System.out.print(currentColumnLetter + " ");
}
++currentColumnLetter;
}//the textbook won't let me edit the lines after this brace
System.out.println("");
}
}
请记住,我只能调整初始化 numRows 和 NumColumns 变量之后和最终 System.out.print(""); 之前的代码。
由于 currentColumnLetter 是一个字符,您可以简单地递增它 - 只要确保转换它即可。您还需要创建一个新变量来保持递增的直线。
char newLetter = (char) (currentColumnLetter + currentColumn);
给出
numRows = 2
numColumns = 3
for (currentRow = 1; currentRow <= numRows; ++currentRow) {
currentColumnLetter = 'A';
for (currentColumn = 1; currentColumn <= numColumns; ++currentColumn) {
System.out.print(currentRow + String.valueOf(currentColumnLetter++) + " ");
}
}
相当于
System.out.print("1" + "A" + " ");
System.out.print("1" + "B" + " ");
System.out.print("1" + "C" + " ");
System.out.print("2" + "A" + " ");
System.out.print("2" + "B" + " ");
System.out.print("2" + "C" + " ");
我想这就是你想要的结果。
注意增量 currentColumnLetter++
。这是 post 递增运算符,它基本上意味着“按原样使用变量,然后递增它”。
在内部 for
循环中仅使用 1 个打印语句。
这将打印行号后跟
对应的字符 64 + currentColumn
ASCII 码,因为 A
的 ASCII 码是 65:
public static void main(String[] args) {
Scanner scnr = new Scanner(System.in);
int numRows;
int numColumns;
int currentRow;
int currentColumn;
numRows = scnr.nextInt();
numColumns = scnr.nextInt();
if (numColumns < 1)
System.exit(1);
for(currentRow = 1; currentRow <= numRows; currentRow++){
for(currentColumn = 1; currentColumn <= numColumns; currentColumn++){
System.out.print(String.valueOf(currentRow) + (char)(64 + currentColumn) + " ");
}
}
System.out.println("");
}
我猜你的意思是:
for(currentRow = 1; currentRow <= numRows; ++currentRow){
for(currentColumn = 0; currentColumn < numColumns; ++currentColumn){
System.out.print(""+currentRow+(char)('A'+currentColumn) + " ");
}
}
在Java中,char
实际上与int
非常相似。 char 实际存储的是一个字符代码,您基本上可以用它对 int 做任何事情。例如,字符 'a'
对应代码 97
。如果你这样做 (char) 'A' + 1
,结果将是 'B'
。您可以使用它来增加内部循环中的列字符。
(注意 (char)
,这称为转换,需要它以便 java 知道将结果解释为字符串。在两者之间进行操作时转换总是一个好主意混合类型,所以结果是明确的)
您的代码在 numColumns = 0
时打印行,因为在第一个打印语句执行之前没有对 numColumns
进行检查。您需要确保仅在 numColumns > 0
时打印输出。
我是学校的初级 Java 学生,我在教科书计划中遇到了挑战 activity,我使用的是 zybooks.com 的教科书,并且在这个特定的 activity 中,我只能更改程序允许我更改的代码。另外,由于我在教科书上的位置,我只能使用简单的东西,比如循环和 if 语句。这是 activity,
的确切方向给定 numRows 和 numColumns,打印剧院所有座位的列表。行有编号,列有字母,如 1A 或 3E。在每个座位后打印一个 space,包括在最后一个座位后。使用单独的打印语句打印行和列。例如:numRows = 2 和 numColumns = 3 打印:1A 1B 1C 2A 2B 2C。
所以,我目前坚持的是将列逐步打印为字母。现在我得到 1A 2A 3A 等等,而我想要的是 1A 1B 1C 2A 2B 2C> 如何用字母递增该列行?
此外,程序不应该 运行 当没有列输入时,但我的程序将打印出行和列,这也不是我想要的。例如,numRows = 3 和 numColumns = 0,该程序不应打印任何内容,但实际情况是该程序将仅打印出像 123 这样的行。如何让程序不 运行 如果没有列输入?
这是我的代码
import java.util.Scanner;
public class NestedLoops {
public static void main (String [] args) {
Scanner scnr = new Scanner(System.in);
int numRows;
int numColumns;
int currentRow;
int currentColumn;
char currentColumnLetter;
numRows = scnr.nextInt();
numColumns = scnr.nextInt();
//what the text book allows me edit
for(currentRow = 1; currentRow <= numRows; ++currentRow){
System.out.print(currentRow);
currentColumnLetter = 'A';
for(currentColumn = 1; currentColumn <= numColumns; ++currentColumn){
currentColumn = currentColumnLetter;
System.out.print(currentColumnLetter + " ");
}
++currentColumnLetter;
}//the textbook won't let me edit the lines after this brace
System.out.println("");
}
}
请记住,我只能调整初始化 numRows 和 NumColumns 变量之后和最终 System.out.print(""); 之前的代码。
由于 currentColumnLetter 是一个字符,您可以简单地递增它 - 只要确保转换它即可。您还需要创建一个新变量来保持递增的直线。
char newLetter = (char) (currentColumnLetter + currentColumn);
给出
numRows = 2
numColumns = 3
for (currentRow = 1; currentRow <= numRows; ++currentRow) {
currentColumnLetter = 'A';
for (currentColumn = 1; currentColumn <= numColumns; ++currentColumn) {
System.out.print(currentRow + String.valueOf(currentColumnLetter++) + " ");
}
}
相当于
System.out.print("1" + "A" + " ");
System.out.print("1" + "B" + " ");
System.out.print("1" + "C" + " ");
System.out.print("2" + "A" + " ");
System.out.print("2" + "B" + " ");
System.out.print("2" + "C" + " ");
我想这就是你想要的结果。
注意增量 currentColumnLetter++
。这是 post 递增运算符,它基本上意味着“按原样使用变量,然后递增它”。
在内部 for
循环中仅使用 1 个打印语句。
这将打印行号后跟
对应的字符 64 + currentColumn
ASCII 码,因为 A
的 ASCII 码是 65:
public static void main(String[] args) {
Scanner scnr = new Scanner(System.in);
int numRows;
int numColumns;
int currentRow;
int currentColumn;
numRows = scnr.nextInt();
numColumns = scnr.nextInt();
if (numColumns < 1)
System.exit(1);
for(currentRow = 1; currentRow <= numRows; currentRow++){
for(currentColumn = 1; currentColumn <= numColumns; currentColumn++){
System.out.print(String.valueOf(currentRow) + (char)(64 + currentColumn) + " ");
}
}
System.out.println("");
}
我猜你的意思是:
for(currentRow = 1; currentRow <= numRows; ++currentRow){
for(currentColumn = 0; currentColumn < numColumns; ++currentColumn){
System.out.print(""+currentRow+(char)('A'+currentColumn) + " ");
}
}
在Java中,char
实际上与int
非常相似。 char 实际存储的是一个字符代码,您基本上可以用它对 int 做任何事情。例如,字符 'a'
对应代码 97
。如果你这样做 (char) 'A' + 1
,结果将是 'B'
。您可以使用它来增加内部循环中的列字符。
(注意 (char)
,这称为转换,需要它以便 java 知道将结果解释为字符串。在两者之间进行操作时转换总是一个好主意混合类型,所以结果是明确的)
您的代码在 numColumns = 0
时打印行,因为在第一个打印语句执行之前没有对 numColumns
进行检查。您需要确保仅在 numColumns > 0
时打印输出。