我试图解决这个问题但没有运气,我有一个负责逻辑的函数,但老实说我不认为那是问题,我认为问题在于正在读取变量。如果有人可以提供帮助,那就太好了。当我运行代码时发生的事情是,似乎只是在没有任何逻辑的情况下生成了随机数。我期望的是随机生成的数字被均分,没有余数。
功能:
template <typename T> CustomStream& operator<<(CustomStream& s, const T& v)
{
static_cast<std::ostream&>(s) << v;
return s;
}
int main()
{
CustomStream s;
s << std::vector<int>{};
}
ViewModel 是一个变量来自的文件,这是它的代码:
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)
}
答案 0 :(得分:1)
一个快速的解决方案可能是使用模运算符 %
如果不是加1
@Published var generatedNum = Int.random(in: 0...5)
@Published var num1 = generatedNum % 2 == 0 ? generatedNum : generatedNum++
我不使用 Swift,所以不知道这是否是正确的语法。但是已经看到模运算符和三元运算符都存在
答案 1 :(得分:1)
您似乎正在尝试生成某个数字 (X) 的随机倍数。如果是这种情况,将随机数乘以 X 会更容易。假设 X 是 5 。 . .
[{'1': 1, '2': 2, 'C': 'c', 'D': 'd', 'E': 'e'},
{'11': 11, '22': 22, 'C': 'c', 'D': 'd', 'E': 'e'}]
如果您想对生成的倍数施加最大值,您可以使用整数除法来找到用于随机生成器的最大值。
viewModel.numTemp1 = 5 * Int.random(in: 0...difficultyNumber1)