Форум программистов, компьютерный форум, киберфорум
Ruby
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.73/15: Рейтинг темы: голосов - 15, средняя оценка - 4.73
1 / 1 / 0
Регистрация: 05.10.2018
Сообщений: 18

Баг с переменной age

13.03.2019, 00:53. Показов 3160. Ответов 6
Метки ruby (Все метки)

Студворк — интернет-сервис помощи студентам
Почему когда я написал '
Ruby
1
age +=1
' у меня за одно выполнение метода oneYearPasses у меня прибавляется 2 года?

Ruby
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
class OrangeTree 
    def initialize tree
         @tree = tree
         @ages = 0
         @long = 1
         @life = true
       @fruits= 0
    end
 
    def height
 
        puts ' now '+ @tree +' longer. That long like the ' + @long.to_s + ' metres!'
end
 
 
    def countTheOranges
    
puts    'now '+ @tree +'  has ' + @fruits.to_s + 'oranges'
end
 
 
def oneYearPasses
    
@ages +=  1
 
@long += 2
 
    puts @tree + 'increaces with  ' + @ages.to_s + ' ages'
    
=begin
if @ages < 10 
    @fruits += 5
    else
        if @ages  < 20
            @fruits += 15
            if @ages  < 30
            @fruits += 300
            else
                puts @tree + 'has been died'
                exit
end 
end
=end
 
    if @ages < 10 and @ages +=1
    @fruits = 5
    else
        if @ages  < 20 and @ages +=1
            @fruits = 15
            if @ages  < 30 and @ages +=1
            @fruits = 300
    
end
end
end
 
end
 
def pickAnOrange
        
    if  @fruits > 0
    @fruits = @fruits - 1
puts  ' How delicious was the orange from '+  @tree+ '! That tree now has '+ @fruits.to_s+ ' oranges!'
else puts @tree +  'already hasn\'t oranges  '
    end
end
                
end
 
tree =  OrangeTree.new 'Your Tree'
tree.height
tree.oneYearPasses
tree.oneYearPasses
tree.oneYearPasses
tree.height
 
tree.countTheOranges
tree.pickAnOrange
tree.pickAnOrange
tree.pickAnOrange
tree.pickAnOrange
tree.pickAnOrange
tree.pickAnOrange
tree.oneYearPasses
tree.pickAnOrange
tree.pickAnOrange
tree.pickAnOrange
tree.pickAnOrange
tree.pickAnOrange
tree.oneYearPasses
tree.oneYearPasses
tree.oneYearPasses
tree.oneYearPasses
tree.oneYearPasses
tree.pickAnOrange
tree.pickAnOrange
tree.pickAnOrange
tree.pickAnOrange
tree.pickAnOrange
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
13.03.2019, 00:53
Ответы с готовыми решениями:

Задача на char. Вывести на экран сумму кодов слов age AGE
вывести на экран сумму кодов слов age AGE

Выводит ответ if(age=+18), и if(age-18) вместе

Ошибка в коде $char = array (name=>'Bob', age=>'30') print $char[age];
&lt;HTML&gt;&lt;BODY&gt; &lt;?php $char = array ( name=&gt;'Bob', age=&gt;'30' ) print $char; ?&gt; ...

6
the hardway first
Эксперт JS
 Аватар для j2FunOnly
2475 / 1847 / 910
Регистрация: 05.06.2015
Сообщений: 3,610
13.03.2019, 05:43
45 и 48 строки, вы в проверке условия ещё раз увеличивает значение @ages
1
1 / 1 / 0
Регистрация: 05.10.2018
Сообщений: 18
14.03.2019, 08:11  [ТС]
Как тогда проверить увеличение года? Ведь мне нужно чтобы переменная @fruits уменьшалась только когда ages возрастёт на 1.
0
the hardway first
Эксперт JS
 Аватар для j2FunOnly
2475 / 1847 / 910
Регистрация: 05.06.2015
Сообщений: 3,610
14.03.2019, 08:26
Цитата Сообщение от RoflanGenius Посмотреть сообщение
Ruby
1
2
3
4
5
6
7
8
9
10
11
    if @ages < 10 and @ages +=1
    @fruits = 5
    else
        if @ages  < 20 and @ages +=1
            @fruits = 15
            if @ages  < 30 and @ages +=1
            @fruits = 300
    
end
end
end
Объясните словами эту логику, пожалуйста. Как вы считаете что тут происходит?

Не по теме:

Как?! вы разбираетесь что у вас написано с таким форматированием кода?

1
1 / 1 / 0
Регистрация: 05.10.2018
Сообщений: 18
14.03.2019, 21:12  [ТС]
Я так понимаю что если @ages <10 и переменной @ages присваивают значение @ages +1 (просто увеличивают на 1), тогда переменной @fruits присваивают значение 5 и т. Д.
0
the hardway first
Эксперт JS
 Аватар для j2FunOnly
2475 / 1847 / 910
Регистрация: 05.06.2015
Сообщений: 3,610
15.03.2019, 08:43
Лучший ответ Сообщение было отмечено RoflanGenius как решение

Решение

Цитата Сообщение от RoflanGenius Посмотреть сообщение
если @ages <10 и переменной @ages присваивают значение @ages +1 (просто увеличивают на 1)
Выражение нельзя поставить в условие, проверятся будет результат этого выражения, т. е. @ages сначала будет увеличена на 1 и потом результат этого действия пойдет на проверку.

Но, вы же в самом начале метода OrangeTree#oneYearPasses уже увеличиваете @ages и здесь вам не нужна эта проверка
Ruby
1
2
3
4
5
6
7
    # допустим @ages = 1, то после такого выражения @ages станет 2, а само
    # условие примет следующий вид, что имеет мало смысла
    if @ages < 10 and @ages +=1 #=> if true and 2
      @fruits = 5
    else
      # code omitted for bravity
    end
Давайте рассмотрим случай когда @ages > 10
Ruby
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
    # допустим @ages = 10, здесь первое условие не выполняется, Ruby не будет
    # вычислять результат второго выражения
    if @ages < 10 and @ages +=1 #=> if false
      @fruits = 5
    # и выполнение программы перейдет к этой строке
    else
      # здесь та же самая ошибка, не надо увеличивать `@ages`
      if @ages < 20 and @ages +=1 #=> if true and 11
        # условие выполнилось, @fruits = 15
        @fruits = 15
        
        # но и здесь условие выполняется, ведь 11 < 30
        if @ages  < 30 and @ages +=1 #=> if true and 12
          @fruits = 300
        end
      end
    end
Отсюда баг, что до 10 лет дерево растет по два года за один вызов метода OrangeTree#oneYearPasses
Code
1
2
3
4
5
now Your Tree longer. That long like the 1 metres!
Your Tree increaces with 1 ages
Your Tree increaces with 3 ages
Your Tree increaces with 5 ages
now Your Tree longer. That long like the 7 metres!
а после 10 лет по три года и имеет 300 фруктов
Code
1
2
3
4
5
6
7
How delicious was the orange from Your Tree! That tree now has 0 oranges!
Your Tree increaces with 9 ages
Your Tree increaces with 11 ages
Your Tree increaces with 14 ages
Your Tree increaces with 17 ages
Your Tree increaces with 20 ages
How delicious was the orange from Your Tree! That tree now has 299 oranges!
В итоге условие может выглядеть так
Ruby
1
2
3
4
5
6
7
    if @ages < 10
      @fruits = 5
    elsif @ages < 20
      @fruits = 15
    elsif @ages < 30
      @fruits = 300
    end
1
1 / 1 / 0
Регистрация: 05.10.2018
Сообщений: 18
19.09.2021, 20:27  [ТС]
j2FunOnly, как же я тупил 2 года назад...
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
19.09.2021, 20:27
Помогаю со студенческими работами здесь

Баг с переименованием переменной
Наткнулся на очень странный баг, связанный с переименованием переменной. Есть php-скрипт, которому передаётся число. Принимаю его в...

Странный баг с переменной типа double**
Короче я вообще не пойму в чем проблема, этот код: void __fastcall TForm1::BitBtn1Click(TObject *Sender) { int i=0,j=0, k=0; ...

std::regex : баг на сайте или баг компилятора?
http://en.cppreference.com/w/cpp/regex/regex_match этот код выкидывает throw... Добавлено через 35 секунд компилятор gcc 4.8

Баг asio? или баг TCP стека?
всем привет. повстречался с очень странным багом. и не могу определить кто бажит, asio, или TCP-стек. на стороне клиента,...

Letter-spacing баг или не баг?
Здравствуйте! Использовал letter-spacing для увеличения расстояния между буквами. Как оказалось расстояние появилось и после последней...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru