如何在Java中嵌套for循环中使用字母增加值?

问题描述 投票:1回答:5

我是学校的初级Java学生,我在教科书课程中遇到了挑战活动,我正在使用zybooks.com的教科书,在这个特定的活动中,我只能更改程序允许我的代码至。另外,由于我在教科书中的位置,我只能使用循环和if语句等简单的东西。以下是活动的确切方向,

给定numRows和numColumns,打印剧院中所有座位的列表。行编号,列字母,如1A或3E中所示。在每个座位后打印一个空格,包括在最后一个之后。使用单独的print语句打印行和列。例如: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(“”);之前调整代码。

java for-loop increment nested-loops
5个回答
1
投票

在Java中,char实际上与int非常相似。 char实际存储的是一个字符代码,你可以做任何你可以用int做的事情。例如,字符'a'对应于代码97。如果你做了(char) 'A' + 1,结果将是'B'。您可以使用它来增加内循环中的列字符。

(注意(char),这叫做cast,需要它以便java知道将结果解释为字符串。在混合类型之间进行操作时,总是一个好主意,所以结果是明确的)

ASCII Table Reference


您的代码在numColumns = 0时打印行,因为在第一个print语句执行之前没有对numColumns进行检查。您需要确保只在numColumns > 0时打印输出。


1
投票

我想你的意思是:

for(currentRow = 1; currentRow <= numRows; ++currentRow){
    for(currentColumn = 0; currentColumn < numColumns; ++currentColumn){
        System.out.print(""+currentRow+(char)('A'+currentColumn) + " ");
    }
}

0
投票

由于currentColumnLetter是一个char,你可以简单地增加它 - 只需确保将其强制转换。您还需要创建一个新变量来保持增量。 char newLetter = (char) (currentColumnLetter + currentColumn);


0
投票

在内部for循环中仅使用1个print语句。 这将打印行的编号,后跟相应的字符 到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("");
}

0
投票

特定

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++。这是后增量运算符,它基本上意味着“按原样使用变量,然后增加它”。

© www.soinside.com 2019 - 2024. All rights reserved.