#java
#java
Вопрос:
У меня возникли проблемы со следующим кодом:
//Program 6.12
public class Ex6_12 {
public static void printChars(char ch1, char ch2, int numberPerLine) {
for (int i = ch1; i>ch2; i ) {
for (int j = 0; j<=numberPerLine; j ) {
System.out.printf("%c ", (char)(i));
}
System.out.println("");
}
}
public static void main (String[] args) {
printChars('1', 'Z', 10);
}
}
Предыдущий код ничего не выводит, и я хочу, чтобы он распечатал выбранный символ в другой выбранный символ с выбранным количеством символов в строке. Не уверен, где я допустил ошибку.
Для этого ввода мне нужен вывод:
1 2 3 4 5 6 7 8 9 :
; < = > ? @ A B C D
E F G H I J K L M N
O P Q R S T U V W X
Y
(Оно варьируется от первого char
переданного до меньшего, чем последнее, с таким количеством char
символов в строке, как numberPerLine
)
Комментарии:
1.
'1'
Больше или меньше'Z'
? (Подсказка: вы хотите<
в условии цикла, а не>
)2. это значения acsii в символах, поэтому оно меньше. я полагаю, что Z равно 90 в acsii, а 1 равно 1.
3. Этого не происходит, оно имеет значение 49
4. Программа возвращает 11 одинаковых значений во многих разных таблицах. Как мне это исправить? Спасибо!
5. Измените
for (int i = ch1; i>ch2; i )
наfor (int i = ch1; i<ch2; i )
Ответ №1:
Для этого вам не нужны два цикла. Поскольку вы используете i
во внутреннем цикле, но никогда не увеличиваете его, вы получаете одну и ту же букву, напечатанную numberPerLine
несколько раз. Просто проверьте, numberPerLine
равен ли модуль numberPerLine - 1
numberPerLine
(если были напечатаны элементы):
public static void printChars(char ch1, char ch2, int numberPerLine) {
for (char i = ch1; i<ch2; i ) {
System.out.printf("%c ", i);
if((i-ch1) % numberPerLine == numberPerLine-1) {
System.out.println("");
}
}
}
Что даст:
1 2 3 4 5 6 7 8 9 :
; < = > ? @ A B C D
E F G H I J K L M N
O P Q R S T U V W X
Y
Ответ №2:
У вас логическая ошибка в первом for
цикле вашего printChars
метода. Цикл должен проверять, i is less than ch2
должен ли он выполняться. Текущий цикл будет бесконечным, если вы приведете правильные аргументы при вызове метода.
Итак, я изменил этот for
цикл for (int i = ch1; i>ch2; i )
на for (int i = ch1; i<ch2; i )
и, как вы могли догадаться, это работает. И, если вы хотите напечатать, включая последний символ, тогда вам нужно будет проверить, пока не будет равно for (int i = ch1; i<=ch2; i )
//Program 6.12
public class Ex6_12 {
public static void printChars(char ch1, char ch2, int numberPerLine) {
for (int i = ch1; i < ch2; i ) {
for (int j = 0; j <= numberPerLine; j ) {
System.out.printf("%c ", (char) (i));
}
System.out.println("");
}
}
public static void main(String[] args) {
printChars('1', 'Z', 10);
}
}
Печать, включая последний символ:
//Program 6.12
public class Ex6_12 {
public static void printChars(char ch1, char ch2, int numberPerLine) {
for (int i = ch1; i <= ch2; i ) {
for (int j = 0; j <= numberPerLine; j ) {
System.out.printf("%c ", (char) (i));
}
System.out.println("");
}
}
public static void main(String[] args) {
printChars('1', 'Z', 10);
}
}
Комментарии:
1. Большое вам спасибо! Но как бы мне заставить символы печатать по одному из каждого вместе в количестве символов в строке как numberPerLine int? Спасибо!
2.
GBlodgett
уже указывал на это. Вы можете использовать этот трюк в для:if((i-ch1) % numberPerLine == numberPerLine-1) { System.out.println(""); }