Застрял в то время как l oop несмотря на условие для l oop больше не выполняется - PullRequest
0 голосов
/ 03 февраля 2020

Я очень плохо знаком с программированием в Swift, и сейчас я пытаюсь написать программу, которая просто берет бюджет и несколько ресторанов, а затем пытается определить, что вы будете есть, исходя из оставшейся суммы бюджета. Кажется, у меня есть код, который должен работать, но по какой-то причине всякий раз, когда он входит во время l oop после определенного числа итераций, он не может распознать, когда totalPrice больше не превышает бюджет. Если я поставлю условие if в конце того времени, пока l oop проверяет, больше ли totalPrice, чем бюджет, оно поймет, что это не так, и затем выполнит все, что я положил в фигурные скобки, но затем не выйдет, пока l oop. Я действительно смущен тем, что происходит не так, и был бы очень признателен за помощь в понимании того, что не так с моим кодом. Большое спасибо за помощь!

import UIKit

var prices = [30,10.99,10.5,11.7,13.99,7.99,8.99,0]
var tips = [0.20,0.18,0.18,0.18,0.18,0.15,0.15,0.0]
var restaurants = ["Salty Snow","Kerby Lane","Milto's","Trudy's","Madam Mam's","Vert's","Teji's","Home"]
var daysOfWeek = ["Sunday", "Monday", "Tuesday","Wednesday", "Thursday", "Friday", "Saturday"]
let taxRate = 0.0825
var budget = 50.0

for i in 1...14{
    print("Week \(i)")
    for day in daysOfWeek {
        var randInt = Int.random(in:0..<8)
        var totalPrice = prices[randInt]+(prices[randInt]*taxRate)+(prices[randInt]*tips[randInt])
        while totalPrice > budget {
            var randInt = Int.random(in:0..<8)
            var totalPrice = prices[randInt]+(prices[randInt]*taxRate)+(prices[randInt]*tips[randInt])
        }
        print(totalPrice, randInt, budget)
        var place = restaurants[randInt]
        budget = budget - totalPrice
        print("\(day) meal: \(place), budget now \(budget)")

    }
    print()
    budget += 50
}

Ответы [ 2 ]

1 голос
/ 03 февраля 2020

Удалить var из переменной totalPrice в то время как l oop ... потому что она не меняется, а создает новую переменную каждый раз

 while totalPrice > budget {
    var randInt = Int.random(in:0..<8)
        totalPrice = prices[randInt]+(prices[randInt]*taxRate)+(prices[randInt]*tips[randInt])
  //var totalPrice = prices[randInt]+(prices[randInt]*taxRate)+(prices[randInt]*tips[randInt])
     }
0 голосов
/ 03 февраля 2020

Когда вы добавили var totalPrice вместо обновления totalPrice в то время как l oop, вы определили новую переменную с тем же именем, и поэтому условия никогда не совпали, и она стала бесконечной l oop. Используйте это:

var prices = [30,10.99,10.5,11.7,13.99,7.99,8.99,0]
var tips = [0.20,0.18,0.18,0.18,0.18,0.15,0.15,0.0]
var restaurants = ["Salty Snow","Kerby Lane","Milto's","Trudy's","Madam Mam's","Vert's","Teji's","Home"]
var daysOfWeek = ["Sunday", "Monday", "Tuesday","Wednesday", "Thursday", "Friday", "Saturday"]
let taxRate = 0.0825
var budget = 50.0

for i in 1...14{
print("Week \(i)")
for day in daysOfWeek {
    let randInt = Int.random(in:0..<8)
    var totalPrice = prices[randInt]+(prices[randInt]*taxRate)+(prices[randInt]*tips[randInt])
    while totalPrice > budget {
        let randInt = Int.random(in:0..<8)
        totalPrice = prices[randInt]+(prices[randInt]*taxRate)+(prices[randInt]*tips[randInt])
        print(totalPrice, randInt, budget)

    }
    let place = restaurants[randInt]
    budget = budget - totalPrice
    print("\(day) meal: \(place), budget now \(budget)")

}
print()
budget += 50
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...