Reputation:
I was trying to solve this problem but no luck, I have a function that is responsible for the logic but to be honest I don't think that that is the problem, I think that the issue is in the way that the variables are being read. If anyone can help it would be a great deal. What is happening when I run the code is it seems like just random numbers are generated without any logic. What I am expecting is for the randomly generated numbers to be equally divided to not have a remainder.
Function:
struct MathContentView: View {
@ObservedObject var viewModel = VariableViewModel()
@State var parent: MathView
// realistic numbers ... only for subtraction and division
// realistic numbers ... only for subtraction and division
func numbersGenerator() {
viewModel.numTemp1 = Int.random(in: 0...difficultyNumber1)
viewModel.numTemp2 = Int.random(in: 0...difficultyNumber2)
if viewModel.numTemp1 > viewModel.numTemp2 && operatorName == "Subtraction" {
viewModel.num1 = viewModel.numTemp1
viewModel.num2 = viewModel.numTemp2
}
if viewModel.numTemp2 > viewModel.numTemp1 && operatorName == "Subtraction" {
viewModel.num1 = viewModel.numTemp2
viewModel.num2 = viewModel.numTemp1
}
if viewModel.numTemp1 == viewModel.numTemp2 && operatorName == "Subtraction" {
viewModel.num1 = viewModel.numTemp1
viewModel.num2 = viewModel.numTemp2
}
if operatorName == "Division" {
// applied zeros (/)
if viewModel.zeroToggle == false {
if viewModel.numTemp2 != 0 {
if viewModel.numTemp1 % viewModel.numTemp2 == 0 {
viewModel.num1 = viewModel.numTemp1
viewModel.num2 = viewModel.numTemp2
}
else {
numbersGenerator()
}
}
else {
numbersGenerator()
}
viewModel.result = viewModel.num1 / viewModel.num2
}
// no zeros (/)
if viewModel.zeroToggle == true {
if viewModel.numTemp1 != 0 && viewModel.numTemp2 != 0 {
if viewModel.numTemp1 % viewModel.numTemp2 == 0 {
viewModel.num1 = viewModel.numTemp1
viewModel.num2 = viewModel.numTemp2
}
else {
numbersGenerator()
}
}
else {
numbersGenerator()
}
}
if operatorName == "Multiplicaton" {
viewModel.num1 = Int.random(in: 0...difficultyNumber1)
viewModel.num2 = Int.random(in: 0...difficultyNumber2)
}
}
}
func passButton() {
numbersGenerator()
viewModel.num1 = Int.random(in: 0...difficultyNumber1)
viewModel.num2 = Int.random(in: 0...difficultyNumber1)
}
ViewModel is a file where the variables are coming from, here is the code for that:
// temp value
var numTemp1 = 0
var numTemp2 = 0
// Randomizing numbers for easy Multiplication
@Published var num1 = Int.random(in: 0...5)
@Published var num2 = Int.random(in: 0...5)
Upvotes: 0
Views: 105
Reputation: 408
A quick solution could be to check if the generated number is divisible by 2 using the Modulo operator %
if it is not add 1
@Published var generatedNum = Int.random(in: 0...5)
@Published var num1 = generatedNum % 2 == 0 ? generatedNum : generatedNum++
I dont use Swift so do not know if that is the correct syntax. But have seen that both Modulo and Ternary Operators exist
Upvotes: 1
Reputation: 479
It seems like you are trying to generate a random multiple of some number (X). If that's the case, it would be easier to just multiply the random number by X. Assuming X is 5 . . .
viewModel.numTemp1 = 5 * Int.random(in: 0...difficultyNumber1)
If you want to enforce a maximum on the generated multiple, you can just use integer division to find the max to use for the random generator.
randMax = Int(difficultyNumber1 / 5)
viewModel.numTemp1 = 5 * Int.random(in: 0...randMax)
Upvotes: 1