Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Принцип действия сокращенных операторов, Вопрос начального уровня 002 
:(
    Опции темы
PrinceOFF
  Дата 23.10.2013, 20:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 40
Регистрация: 21.10.2013
Где: Минск, РБ

Репутация: нет
Всего: нет



Все привет.
Как и предыдущий свой вопрос, хотел прочитав новую главу, сначала самому составить программу, а потом посмотреть как она составлена в книге. Да не тут-то было... Мало того, что сам не составил, так еще и разобрать готовую не получается - второй день сижу в ступоре и не могу понять принцип действия операторов:
Код

import javax.swing.*;
public class UsingWhile {
   public static void main(String[] args) { // подсчет суммы чесел в интервале от 1 до 100
   int lower=0,number=1, count, upper=100;
   count=Integer.parseInt(JOptionPane.showInputDialog("Введите границу суммы"));
   
   String text="Сумма натуральных чисел от 0 до "+count+"\n";
   String str="Оператор do-while: ";
   
   while(number<=count){
        lower+=number;
        number++;
   }
   str+=lower;
           
   JOptionPane.showMessageDialog(null,text+str);    
   }
}

Вопросы:
1. Не могу понять принцип действия сокращенных операторов и инкремента в 11 и 12 строчке.
2. Точно также не могу понять принцип действия 14 строчки.

Мои рассуждения:
1. lower+=number обозначает lower=lower+number, т.е. lower (который изначально инициализирован как "0"), равен 0+1, т.е. уже равен "1". Не смотря на то, что мы его задали равным нулю. Краем уха, забегая вперед своего обучения, немножко слышал про константу. Т.е. если бы мы в начале программы обозначили lower как 
Код

final int lower=0
, то это значение уже не могло бы меняться, я прав? Итак, с учетом следующей строчки инкремента number, пока условие number меньше введенного значения count, number будет увеличиваться на единицу. Т.е. каждый раз будет происходить новая инициализация lower, которая также будет увеличиваться на единицу? Тогда непонятно откуда здесь берется сумма каждого нового значения..? Ясно, что программа работает, но вот как пока понять не могу...
2. str+=lower обозначает str=str+lower - т.е. просто текст в 8 строке + наше значение lower. Но почему именно lower - понять не могу. Когда я объявлял переменные, я пологал, что роль нашей суммы должна играть переменная count, которая и неинициирована в начале в отличие от других переменных..?
В общем, чехарда в голове полная...

P.S. И еще - если вы считаете, что ответ на эти вопросы принесет мне потенциальный вред в плане изучения java и лучше, все-таки, сидеть дальше и ломать голову самому - не отвечайте. Если вреда в этом нет - ответьте  smile 
P.S2. Я вот думаю - если у меня на раннем этапе изучения такие заморочки, то не значит ли это, что дальше, при изучении серьезных глав вообще будет темный лес? Неужели все через "это" проходили?

 
PM   Вверх
Mirkes
Дата 24.10.2013, 00:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 586
Регистрация: 18.8.2011
Где: Красноярск

Репутация: 7
Всего: 17



Как вам уже писали ранее, тому уроду, который писал примеры следовало оторвать руки. Переменным надо давать осмысленные имена!
Вот та же программа с заменой имен:
Код

import javax.swing.*;
public class UsingWhile {
   public static void main(String[] args) { // подсчет суммы чесел в интервале от 1 до 100
   int sum=0,currentNumber=1, maxNumber;
   maxNumber=Integer.parseInt(JOptionPane.showInputDialog("Введите границу суммы"));
   
   String text="Сумма натуральных чисел от 0 до "+maxNumber+"\n";
   String str="Оператор do-while: ";
   
   while(currentNumber<=maxNumber){
        sum+=currentNumber;
        currentNumber++;
   }
   str+=sum;
           
   JOptionPane.showMessageDialog(null,text+str);    
   }
}


Думаю так понятнее smile
sum - сумма, изначально ноль!
currentNumber - переменная цикла, сначала 1 потом увеличивается
maxNumber - верхняя граница цикла, вводится с клавиатуры, посему не инициирована

Кстати, это цикл while а не do-while
Такие фрагменты писать через while - дурной тон, пример - просто безобразный.
Если идея был продемонстрировать сокращенные операторы, то можно было еще короче:
Код

import javax.swing.*;
public class UsingWhile {
   public static void main(String[] args) { // подсчет суммы чесел в интервале от 1 до 100
   int sum=0,currentNumber=1, maxNumber;
   maxNumber=Integer.parseInt(JOptionPane.showInputDialog("Введите границу суммы"));
   
   String text="Сумма натуральных чисел от 0 до "+maxNumber+"\n";
   String str="Оператор do-while: ";
   
   while(currentNumber<=maxNumber){
        sum+=currentNumber++;
   }
   str+=sum;
           
   JOptionPane.showMessageDialog(null,text+str);    
   }
}


А если уж извращаться до конца, тогда получим
Код

import javax.swing.*;
public class UsingWhile {
   public static void main(String[] args) { // подсчет суммы чесел в интервале от 1 до 100
   int sum=0,currentNumber=1, maxNumber;
   maxNumber=Integer.parseInt(JOptionPane.showInputDialog("Введите границу суммы"));
   
   String text="Сумма натуральных чисел от 0 до "+maxNumber+"\n";
   String str="Оператор do-while: ";
   
   for (int i=1;i<maxNumber;sum+=i++);
   str+=sum;
           
   JOptionPane.showMessageDialog(null,text+str);    
   }
}


Честно говоря, мне кажется это плохой самоучитель.



--------------------
Mirkes
PM MAIL   Вверх
PrinceOFF
Дата 24.10.2013, 14:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 40
Регистрация: 21.10.2013
Где: Минск, РБ

Репутация: нет
Всего: нет



Цитата
Как вам уже писали ранее, тому уроду, который писал примеры следовало оторвать руки. Переменным надо давать осмысленные имена!

Похоже, "тот урод" - это я... У автора книги переменные типа i,j,s и т.д. А вот я уже пытался (следуя совету) дать какие-то другие обозначения, но, судя по всему, дал неудачно... 
Цитата

Думаю так понятнее 
sum - сумма, изначально ноль!
currentNumber - переменная цикла, сначала 1 потом увеличивается
maxNumber - верхняя граница цикла, вводится с клавиатуры, посему не инициирована

Да, переменные выглядят лучше и осмысленнее, но ответы на свои вопросы я так и не получил. Названия переменных мы поменяли (и даже убрали одну (зачем она была введена в самоучителе тоже вопрос?)), но принцип их действия остался тем же, и я его, к сожалению, не понял...  smile 
Цитата

Честно говоря, мне кажется это плохой самоучитель.

А какой хороший? Я выбрал этот самоучитель потому что мне понравилась аннотация: "... Материал книги излагается последовательно и сопровождается большим количеством наглядных примеров, разноплановых практических задач и детальным разбором их решений..." Что еще надо человеку, который самостоятельно занимается изучением java? smile 
Есть у меня еще и "Библиотека профессионала java. Хорстманн, Корнелл" - просматривал я мельком те главы, которые уже успел прочитать по Васильеву, и честно говоря, у меня осталось впечатление, что у Васильева, материал действительно последовательно излагается. И более детально что ли, и наглядно... Каждому оператору посвящена своя глава... А у Хорстманна операторы как-то все вместе собраны, без разграничений...  Я знаю, что многие Хорстманна и Корнелла называют чуть ли ни самым лучшим самоучителем, но такое уж мое мнение (возможно ошибочное. потому что я бегло просматривал книгу, а не подробно)...
Посоветуйте хороший, на ваш взгляд, самоучитель (с хорошими примерами для разбора) по которому можно изучить java с нуля. Вы также по самоучителю учились или как-то иначе?
PM   Вверх
Mirkes
Дата 24.10.2013, 15:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 586
Регистрация: 18.8.2011
Где: Красноярск

Репутация: 7
Всего: 17



К сожалению не могу порекомендовать другую книгу - сам учил фактически по примерам и справочникам, но у меня это был далеко не первый язык. Ваши переменные были лучше, чем в самоучителе  smile 
Давайте посмотрим на мой последний текст
Код

import javax.swing.*;
public class UsingWhile {
   public static void main(String[] args) { // подсчет суммы чисел в интервале от 1 до 100
   int sum=0, maxNumber;
   maxNumber=Integer.parseInt(JOptionPane.showInputDialog("Введите границу суммы"));
   
   String text="Сумма натуральных чисел от 0 до "+maxNumber+"\n";
   String str="Оператор do-while: ";
   
   for (int i=1;i<maxNumber;sum+=i++);
   str+=sum;
           
   JOptionPane.showMessageDialog(null,text+str);    
   }
}

С точки зрения сокращенных операторов интерес представляют только два:
Код

 for (int i=1;i<maxNumber;sum+=i++);

Переменная sum инициирована 0 (просто напоминание)
Тело цикла - пустое (сразу после закрывающей скобки стоит ";")
Запись цикла состоит из трех частей, разделенных ";"
Первая часть - инициация. в ней я описал переменную цикла i (переменным коротких циклов обычно дают простые имена, что противоречит правилу осмысленности smile) и инициировал ее единицей.
вторая часть - условие продолжения у меня написана с ошибкой  smile  следовало написать i<=maxNumber, поскольку в предыдущем варианте не добавлялось последнее слагаемое.
Третья часть - изменение переменной(ых) цикла. Вот она представляет особый интерес
sum+=i++
эквивалентно записи sum=sum + i; i=i+1
Следует заметить, что краткая запись не только экономит размер файла (на что вообще говоря наплевать) но и выполняется быстрее, что может быть весьма полезно  smile 

Теперь второй сокращенный оператор:
str+=sum;
он эквивалентен str=str+sum и фактически означает дописать в конец строки str текстовое представление числа sum.

Теперь по поводу циклов. Цикл for рассмотрен в предыдущем примере.
Цикл while
Код

   while(currentNumber<=maxNumber){
        sum+=currentNumber++;
   }


Цикл do-while
Код

   do{
        sum+=currentNumber++;
  }while(currentNumber<=maxNumber+1);

Основное отличие этого цикла в том, что условие проверяется ПОСЛЕ выполнения тела
Удачи


--------------------
Mirkes
PM MAIL   Вверх
PrinceOFF
Дата 24.10.2013, 17:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 40
Регистрация: 21.10.2013
Где: Минск, РБ

Репутация: нет
Всего: нет



Спасибо
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0447 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.