尝试随机生成均分的数字

时间:2021-02-28 23:57:50

标签: swift swiftui

我试图解决这个问题但没有运气,我有一个负责逻辑的函数,但老实说我不认为那是问题,我认为问题在于正在读取变量。如果有人可以提供帮助,那就太好了。当我运行代码时发生的事情是,似乎只是在没有任何逻辑的情况下生成了随机数。我期望的是随机生成的数字被均分,没有余数。

功能:

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)
    }

2 个答案:

答案 0 :(得分:1)

一个快速的解决方案可能是使用模运算符 %

检查生成的数字是否可以被 2 整除

如果不是加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)
相关问题