CS193P - 向iOS计算器添加浮点按钮

cab*_*ret 7 floating-point objective-c cs193p ios

我最近开始在iTunes U上关注斯坦福大学的iPhone开发在线课程.

我正在尝试为前几个讲座做家庭作业.我跟着我构建了一个基本计算器的演练,但现在我正在尝试第一个任务,我似乎无法解决它.这是一个:

您的计算器已经使用浮点数(例如,如果按3/4 =它将正确显示结果值0.75),但是,用户无法输入浮点数.补救这个.仅允许输入合法的浮点数(例如,"192.168.0.1"不是合法的浮点数).

首先,我不确定浮点是否算作digitPressed或operationPressed.我甚至尝试过一种新方法,floatingPointPressed但这种方法并没有真正解决.有人可以提供这方面的指示吗?

当我看到它作为digitPressed时,我尝试过这样的事情:

    if (hasFloatingPoint) {
        NSRange range = [[display text] rangeOfString:@"."];
        if (range.location == NSNotFound) 
        {
            [display setText:[[display text] stringByAppendingFormat:digit]];
            hasFloatingPoint = YES;
        }
    }
    else {
        [display setText:[[display text] stringByAppendingFormat:digit]];
    }
Run Code Online (Sandbox Code Playgroud)

但我想,我在这里错过了关键概念.

我已经尝试了另一种解决方案,遗憾的是,我已经撤消了所以我无法提供代码,但发生的事情是这样的:我可以按一个数字,5然后说一个浮动点,3所以我最终会结束5.3.然后我设法'禁用'输入剩余部分的浮点数.但我想我对它有点过于严格:例如,我不能放入5.3.2但是在按下操作按钮(+等)之后,它仍然不会让我按下浮点按钮.我想我应该重置我用过的bool?

我不是在寻找一个完全写出来的解决方案,但有人可以如此善意地提供一些关于如何解决这个问题的基本建议吗?在不实际提供代码解决方案的情况下,对我应该做什么和思考的一些逐步概述.

提前致谢.

cab*_*ret 5

好的.我解决了这个问题 一旦我设法绕过它,相当容易:

-(IBAction)digitPressed:(UIButton *)sender
{
    NSString *digit = [[sender titleLabel] text];
    NSRange range = [[display text] rangeOfString:@"."];
    if (userIsInTheMiddleOfTypingANumber) 
    {
        if ( ! ([digit isEqual:@"."] && (range.location != NSNotFound))) {
            [display setText:[[display text] stringByAppendingFormat:digit]];
        }
    }
    else 
    {
        if ([digit isEqual:@"."]) {
            [display setText: @"0."];
        }
        else {
            [display setText: digit];
        }

        userIsInTheMiddleOfTypingANumber = YES;

    }

}
Run Code Online (Sandbox Code Playgroud)


Abi*_*ern 2

由于您想要了解在哪里查看的提示,请查看将NSNumberFormatter附加到输入字段。

这是验证输入的正确方法,而不是手动检查用户自己输入的每个字符。

编辑 我刚刚阅读了您正在尝试完成的作业。我认为我在这里的答案虽然仍然是正确的方法,但不是完成作业试图让你做的事情的最佳方法。

由于您正在将数字添加到视图中并将它们附加到您正在操作的数字上,因此您将一一阅读数字,因此您的原始答案可能是正确的:

  • 继续接受添加的数字
  • 添加一个decimalEntered标志 - 将其初始化为“NO”
  • 如果输入小数,则检查标志,如果为否,则接受它并将标志设置为YES
  • 如果输入小数且标志为 YES,则不接受。
  • 每当您按下操作数时,请将此标志设置回 NO。

当您了解更多时,您会意识到执行此操作的另一种方法是让用户在字段中键入。将格式化程序连接到该字段以验证输入是否是有效的数字,但它也可以将字符串转换为数字。当按下操作数时,该数字将被保留为操作数将进行操作的数字之一。