2017-11-21 4 views
0

저는 이진 계산기 앱을 만들었습니다. 숫자에는 두 개의 변수가 있습니다. previousNumber 및 numberOnScreen. 아이디어는 이진수를 십진수로 변환하고, 계산을 수행하고, 답을 다시 변환하는 것입니다.두 번째 변수는 첫 번째 값을 취합니다

내가 선택 첫 번째 (previousNumber) 번호는 10100

var numberOnScreen:Int = 0; 
var previousNumber:Int = 0; 
var doingMath = false 
var operation = 0; 
var decimal = 0; 
var decimal1 = 0; 
var binary:String = "" 
var binary1:String = "" 

@IBOutlet weak var label: UILabel! 

@IBAction func Numbers(_ sender: UIButton) { 
    if doingMath == true 
    { 
     label.text = String(sender.tag-1) 
     numberOnScreen = Int(label.text!)! 
     doingMath = false 
    } 
    else 
    { 
     label.text = label.text! + String(sender.tag-1) 
     numberOnScreen = Int(label.text!)! 
    } 
} 

@IBAction func buttons(_ sender: UIButton) { 

    if label.text != "" && sender.tag != 6 && sender.tag != 8 
    { 
     previousNumber = Int(label.text!)! 
     binary = "\(previousNumber)" 
     decimal = Int(binary, radix: 2)! 
     binary1 = "\(numberOnScreen)" 
     decimal1 = Int(binary1, radix: 2)! 

     operation = sender.tag 
     doingMath = true; 
    } 
    else if sender.tag == 8 
    { 
     if operation == 3 //adding 
     { 
      print(previousNumber, numberOnScreen, decimal, decimal1) 

그것은 인쇄 1010이고 두 번째 (numberOnScreen) 말할 수 있습니다 [1010, 10100, 10, 10}

어떤 아이디어이 인 이유 사고?

+0

그것은 나를 위해 작동합니다. 'numberOnScreen'의 값을 확인하십시오. 아마도 틀린 것일 수도 있습니다. – paper1111

+0

놀이터에서 작동하지만 앱에 숫자를 삽입하면 나에게 잘못된 대답을줍니다. 이 때문에 모든 x + y = x + x x - y = x - x. 등등 – Gustav

+0

어떤 버튼이'func buttons '에 연결되어 있고'sender.tag'의 의미는'6'과'8'입니까? – vacawama

답변

0

= 키를 누르면 decimal1의 계산을 업데이트해야합니다. 당신이 =를 처리하는 곳으로 그 코드를 이동 :

@IBAction func buttons(_ sender: UIButton) { 

    if label.text != "" && sender.tag != 6 && sender.tag != 8 
    { 
     previousNumber = Int(label.text!)! 
     binary = "\(previousNumber)" 
     decimal = Int(binary, radix: 2)! 

     operation = sender.tag 
     doingMath = true; 
    } 
    else if sender.tag == 8 
    { 
     binary1 = "\(numberOnScreen)" 
     decimal1 = Int(binary1, radix: 2)! 

     if operation == 3 //adding 
     { 
      print(previousNumber, numberOnScreen, decimal, decimal1) 

은 또한, 나는 당신이 당신의 코드에서 매직 넘버을 제거하는 것이 좋습니다와 상수로 교체.

를 다음 코드를 읽을 것입니다 : 키 태그의 경우,이 같은 구조체를 정의 할 수

if label.text != "" && sender.tag != Key.clear && sender.tag != Key.equals { 

훨씬 명확하다.

관련 문제