Как мне увеличить значение с буквами во вложенном цикле for в Java? - PullRequest
0 голосов
/ 26 февраля 2019

Я учусь на Java в школе для начинающих, и я застрял на задании по заданию в своей учебной программе, я использую учебник от zybooks.com, и в этом конкретном упражнении я могу изменить только код, которыйПрограмма позволяет мне.Кроме того, из-за того, где я нахожусь в учебнике, я могу использовать только простые вещи, такие как циклы и операторы if.Вот точные направления деятельности:

С учетом numRows и numColumns выведите список всех мест в театре.Строки пронумерованы, столбцы обозначены буквами, как в 1A или 3E.Напечатайте пробел после каждого места, в том числе после последнего.Используйте отдельные операторы печати для печати строки и столбца.Пример: numRows = 2 и numColumns = 3 отпечатка: 1A 1B 1C 2A 2B 2C.

Итак, на данный момент я застрял в печати буквально столбцов.Прямо сейчас я получаю 1A 2A 3A и так далее, когда мне нужно 1A 1B 1C 2A 2B 2C> Как увеличить строку столбца буквами?

Кроме того, программа не должна запускаться, если столбцы не введены, но моя программа будет печатать строки и столбцы, что мне тоже не нужно.Например, numRows = 3 и numColumns = 0, программа не должна ничего распечатывать, но происходит то, что программа будет печатать только строки, подобные этой 123. Как заставить программу не запускаться, если нет столбцовinput?

Вот мой код

 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 ("") ;.

Ответы [ 5 ]

0 голосов
/ 26 февраля 2019

В Java char на самом деле работает довольно похоже на int.То, что на самом деле хранит char, это код символа, который вы можете делать практически с любым, что вы можете сделать с int.Например, символ 'a' соответствует коду 97.Если вы сделали (char) 'A' + 1, результат будет 'B'.Вы можете использовать это, чтобы увеличить символ столбца во внутреннем цикле.

(Обратите внимание на (char), это называется приведением, и это необходимо, чтобы Java знал, как интерпретировать результат как строку. Это всегдахорошая идея приводить при выполнении операций между смешанными типами, поэтому результат однозначен)

Ссылка на таблицу ASCII


Ваш код печатает строки, когда numColumns = 0 потому что нет никаких проверок numColumns перед выполнением первого оператора печати.Вы должны убедиться, что вы печатаете только вывод, когда numColumns > 0.

0 голосов
/ 26 февраля 2019

Полагаю, вы имеете в виду:

for(currentRow = 1; currentRow <= numRows; ++currentRow){
    for(currentColumn = 0; currentColumn < numColumns; ++currentColumn){
        System.out.print(""+currentRow+(char)('A'+currentColumn) + " ");
    }
}
0 голосов
/ 26 февраля 2019

Учитывая

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++.Это оператор постинкремента, и он в основном означает « использовать переменную как есть, а после этого увеличивать ее ».

0 голосов
/ 26 февраля 2019

Используйте только 1 оператор print внутри внутреннего цикла for.Это напечатает номер строки, за которой следует символ, соответствующий64 + currentColumn ASCII-код, потому что ASCII-код A равен 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 голосов
/ 26 февраля 2019

Поскольку currentColumnLetter - это символ, вы можете просто увеличить его - просто убедитесь, что он приведен.Вам также нужно будет создать новую переменную, чтобы увеличить приращение.
char newLetter = (char) (currentColumnLetter + currentColumn);

...