1 / 1 / 0
Регистрация: 05.10.2018
Сообщений: 18
1

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

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

Author24 — интернет-сервис помощи студентам
Почему когда я написал '
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
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
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' ) ...

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

6
the hardway first
Эксперт JS
2461 / 1836 / 906
Регистрация: 05.06.2015
Сообщений: 3,603
13.03.2019, 05:43 2
45 и 48 строки, вы в проверке условия ещё раз увеличивает значение @ages
1
1 / 1 / 0
Регистрация: 05.10.2018
Сообщений: 18
14.03.2019, 08:11  [ТС] 3
Как тогда проверить увеличение года? Ведь мне нужно чтобы переменная @fruits уменьшалась только когда ages возрастёт на 1.
0
the hardway first
Эксперт JS
2461 / 1836 / 906
Регистрация: 05.06.2015
Сообщений: 3,603
14.03.2019, 08:26 4
Цитата Сообщение от 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  [ТС] 5
Я так понимаю что если @ages <10 и переменной @ages присваивают значение @ages +1 (просто увеличивают на 1), тогда переменной @fruits присваивают значение 5 и т. Д.
0
the hardway first
Эксперт JS
2461 / 1836 / 906
Регистрация: 05.06.2015
Сообщений: 3,603
15.03.2019, 08:43 6
Лучший ответ Сообщение было отмечено 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
Код
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 фруктов
Код
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  [ТС] 7
j2FunOnly, как же я тупил 2 года назад...
1
19.09.2021, 20:27
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
19.09.2021, 20:27
Помогаю со студенческими работами здесь

Странный баг с переменной типа double**
Короче я вообще не пойму в чем проблема, этот код: void __fastcall TForm1::BitBtn1Click(TObject...

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

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

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


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru