В чем разница между двумя реализациями метода? Почему работает только один?
Хотел написать метод, который выводит все символы ASCII. Написал следующее, оно работает некорректно, просто циклом выводит один символ:
public class AddTools {
public static void main(String[] args) {
for (int i = 0 ; i < 127 ; i++) {
try {
Thread.sleep(20);
}
catch (InterruptedException e) {
e.printStackTrace();
}
char ch = 0;
System.out.print(ch + " ");
ch++;
}
}
}
Потом решил поместить ch и увеличение его числа в заголовок цикла, все заработало:
public class AddTools {
public static void main(String[] args) {
for (char ch = 0; ch < 127 ; ch++) {
try {
Thread.sleep(20);
}
catch (InterruptedException e) {
e.printStackTrace();
}
System.out.print(ch + " ");
}
}
}
Объясните, почему в первом случае метод не работает?
Почему первый вариант не работает? Работает. Пытается вывести нулевой символ 127 раз, как ты и запрограммировал. А если нужно выводить разные символы, то переменную ch объявляй и инициализируй перед циклом, а не внутри его.
И отдельно замечу, что символы ASCII с 0 по 31 не имеют печатного представления, поэтому выводить их бессмысленно. А 32 - это пробел.
Всё сработало в точности так, как ты написал. Баг у тебя в мозгу
пойми как работает твой код...
в твоей первой версии ты на каждом шагу начинаешь с того что делаешь
char ch = 0;
то что ты потом делаешь ch++ уже ничего не меняет...
можно и так исправить
public class AddTools {
public static void main(String[] args) {
char ch = 0;
for (int i = 0 ; i < 127 ; i++) {
try {
Thread.sleep(20);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.print(ch + " ");
ch++;
}
}
}
В первом случае перед выводом в консоль происходит присвание этой переменной нуля