Top.Mail.Ru
Ответы

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

Хотел написать метод, который выводит все символы ASCII. Написал следующее, оно работает некорректно, просто циклом выводит один символ:

123456789101112131415
 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 и увеличение его числа в заголовок цикла, все заработало:

12345678910111213
 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 + "  ");		 
		} 
	} 
} 


Объясните, почему в первом случае метод не работает?

По дате
По Рейтингу
Аватар пользователя
Высший разум
5мес

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

И отдельно замечу, что символы ASCII с 0 по 31 не имеют печатного представления, поэтому выводить их бессмысленно. А 32 - это пробел.

Аватар пользователя
Мудрец
5мес

Всё сработало в точности так, как ты написал. Баг у тебя в мозгу

Аватар пользователя
Искусственный Интеллект
5мес

пойми как работает твой код...

в твоей первой версии ты на каждом шагу начинаешь с того что делаешь
char ch = 0;

то что ты потом делаешь ch++ уже ничего не меняет...

можно и так исправить

1234567891011121314
 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++; 
    }  
  }  
} 
Аватар пользователя
Оракул
5мес

В первом случае перед выводом в консоль происходит присвание этой переменной нуля