Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 分数减速机应用中的问题_Objective C_Crash_Reduce_Fractions - Fatal编程技术网

Objective c 分数减速机应用中的问题

Objective c 分数减速机应用中的问题,objective-c,crash,reduce,fractions,Objective C,Crash,Reduce,Fractions,我将很快开始:我有一个iPhone OS 3.1.2的应用程序,可以减少分数。我有4个销售点: oTop和oBottom:两个UITextField,代表原始顶部和原始底部 rTop和RBOTOM:两个UILabel,代表reducedTop和reducedBottom 以下是我使用的代码: -(i)减少{ int分子=[[oTop text]intValue]; int分母=[[oBottom text]intValue]; 如果(分母>0){ NSMUTABLEARRY*因子1=[[NSMU

我将很快开始:我有一个iPhone OS 3.1.2的应用程序,可以减少分数。我有4个销售点:

  • oTop和oBottom:两个UITextField,代表原始顶部和原始底部
  • rTop和RBOTOM:两个UILabel,代表reducedTop和reducedBottom
  • 以下是我使用的代码:

    -(i)减少{

    int分子=[[oTop text]intValue];
    int分母=[[oBottom text]intValue];
    如果(分母>0){
    NSMUTABLEARRY*因子1=[[NSMUTABLEARRY alloc]init];
    NSMutableArray*factors2=[[NSMutableArray alloc]init];
    整数因子1长度;
    整数因子2长度;
    对于(inti=1;i对于(int i=factors1length;i看起来像是在第一个for-i循环中,i从0开始,然后除以i(即0)

    编辑:在被零除之前有一个问题导致了最初的崩溃,之后还有其他几个问题

  • 在第一个循环中,addObject使用@“%@”完成,但它必须是@“%d”,因为i是整数而不是字符串。请参阅

  • factors1length和factors2length需要初始化为零,否则它们将以随机值开始,这将抛出代码的其余部分

  • 第二个循环中的addObject需要使用@“%f”而不是@“%@”,因为您试图在那里使用浮点值(分子/xxx…)。但是,在数组中以字符串形式存储数字的方法存在问题。首先,您将一些数字存储为int,另一些存储为float。请坚持使用一种类型。其次,最好将数字存储为数字,而不是转换为字符串并返回。您可以通过将int/float转换为NSNumber对象,将它们存储在NSMUTABLE数组中

  • 如果您还没有这样做,请接受cdespinosa的建议,在调试器中一次一行地遍历代码,查看变量的值以及执行的代码

    我还建议不要在一行中放入太多逻辑。例如,第二个循环中的addObject行做得太多,很难看到问题。 通过声明局部变量将表达式的值存储在行中,将其分解。
    因此,与此相反:

    [factors1 addObject:[NSString stringWithFormat:@"%@", (numerator / [[factors1 objectAtIndex:i] intValue])]];
    
    这样写:

    int iFactor = [[factors1 objectAtIndex:i] intValue];
    float value = (numerator / iFactor);
    NSString *newFactor = [NSString stringWithFormat:@"%@", value];
    [factors1 addObject:newFactor];
    

    这将使调试更容易。

    看起来像在第一个for-i循环中,i从0开始,然后除以i(即0)

    编辑:在被零除之前有一个问题导致了最初的崩溃,之后还有其他几个问题

  • 在第一个循环中,addObject使用@“%@”完成,但它必须是@“%d”,因为i是整数而不是字符串。请参阅

  • factors1length和factors2length需要初始化为零,否则它们将以随机值开始,这将抛出代码的其余部分

  • 第二个循环中的addObject需要使用@“%f”而不是@“%@”,因为您试图在那里使用浮点值(分子/xxx…)。但是,在数组中以字符串形式存储数字的方法存在问题。首先,您将一些数字存储为int,另一些存储为float。请坚持使用一种类型。其次,最好将数字存储为数字,而不是转换为字符串并返回。您可以通过将int/float转换为NSNumber对象,将它们存储在NSMUTABLE数组中

  • 如果您还没有这样做,请接受cdespinosa的建议,在调试器中一次一行地遍历代码,查看变量的值以及执行的代码

    我还建议不要在一行中放入太多逻辑。例如,第二个循环中的addObject行做得太多,很难看到问题。 通过声明局部变量将表达式的值存储在行中,将其分解。
    因此,与此相反:

    [factors1 addObject:[NSString stringWithFormat:@"%@", (numerator / [[factors1 objectAtIndex:i] intValue])]];
    
    这样写:

    int iFactor = [[factors1 objectAtIndex:i] intValue];
    float value = (numerator / iFactor);
    NSString *newFactor = [NSString stringWithFormat:@"%@", value];
    [factors1 addObject:newFactor];
    

    这将使调试变得更容易。

    您可能需要查找两个整数的最大公约数。它更快(甚至更容易编码)比因式分解更快。维基百科文章中有一些示例实现。

    您可能需要查找两个整数的最大公约数。它更快(甚至更容易编码)比因式分解更重要。维基百科文章中有一些示例实现。

    感谢您的帮助,但它仍然崩溃。还有其他问题吗?(除了第三个for-i循环)您是否尝试过在方法的开头设置断点,单步执行代码,在执行过程中查看局部变量的值,并注意到它崩溃的行?不确定在遵循cdespinosa的好建议后是否已经解决了这个问题,但我会很快在我的答案中添加代码中发现的更多问题。好的,我发现了问题。它在第二个和第四个for-i循环中。我将对此进行更多调查。谢谢!谢谢你的帮助,但它仍然崩溃。还有问题吗?(除了第三个for-i循环)您是否尝试过在方法的开头设置断点,单步执行代码,在执行过程中查看局部变量的值,并注意到它崩溃的行?不确定在遵循cdespinosa的好建议后是否已经解决了这个问题,但我会很快在我的答案中添加代码中发现的更多问题。好的,我发现了问题。它在第二和第四个for-i循环中。我将进一步研究这些循环。谢谢!