Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

В чем разница между двумя реализациями метода? Почему работает только один?

Shern Ученик (134), открыт 1 неделю назад
Хотел написать метод, который выводит все символы 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 + " ");
}
}
}

Объясните, почему в первом случае метод не работает?
4 ответа
Папа Высший разум (146763) 1 неделю назад
Почему первый вариант не работает? Работает. Пытается вывести нулевой символ 127 раз, как ты и запрограммировал. А если нужно выводить разные символы, то переменную ch объявляй и инициализируй перед циклом, а не внутри его.

И отдельно замечу, что символы ASCII с 0 по 31 не имеют печатного представления, поэтому выводить их бессмысленно. А 32 - это пробел.
ShernУченик (134) 1 неделю назад
Индекс этого символа должен увеличиваться на 1 каждый ход цикла. [ch++; внутри цикла]
Но этого почему то не происходит
Папа Высший разум (146763) Незерит ., потому что ты переменную объявил внутри цикла и на каждой итерации ставишь её в 0.
Терр Онтал Мудрец (13282) 1 неделю назад
Всё сработало в точности так, как ты написал. Баг у тебя в мозгу
Сергей Иванов Оракул (50147) 1 неделю назад
В первом случае перед выводом в консоль происходит присвание этой переменной нуля
Александр Искусственный Интеллект (305214) 6 дней назад
пойми как работает твой код...

в твоей первой версии ты на каждом шагу начинаешь с того что делаешь
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++;
}
}
}
Похожие вопросы