2016-09-29 29 views
0

****更新****斯威夫特3:計算字段錯誤

最新的傳奇讓我仍然困惑。建議我按照數學計算對代碼進行排序。然而,我仍然像以前一樣發生運行錯誤。請參閱附件..

@IBAction func Calculate(_ sender: AnyObject) { 

    let firstValue = Double(ZFWinput.text!) 
    let secondValue = Double(TotalFuelinput.text!) 
    let thirdValue = Double(TripFuelinput.text!) 

    let TFO000 = Double(secondValue!) 
    let TFO004 = Double(secondValue! * 1.004) 
    let TFO006 = Double(secondValue! * 1.006) 
    let TFO007 = Double(secondValue! * 1.007) 
    let TFO010 = Double(secondValue! * 1.01) 
    let TFO011 = Double(secondValue! * 1.011) 
    let TFO012 = Double(secondValue! * 1.012) 

    let TripF000 = Double(thirdValue!) 
    let TripF004 = Double(thirdValue! * 1.004) 
    let TripF006 = Double(thirdValue! * 1.006) 
    let TripF007 = Double(thirdValue! * 1.007) 
    let TripF010 = Double(thirdValue! * 1.10) 
    let TripF011 = Double(thirdValue! * 1.11) 
    let TripF012 = Double (thirdValue! * 1.12) 


    // *Self Reminder* Calculation for Total Fuel Adjustment with various TDP Loaded 

    if mainbutton.isOn && fwdbutton.isOn && aftbutton.isOn { 
     TotalFuelOutput2.text = "\(TFO012)" 
    } 
    else if fwdbutton.isOn && aftbutton.isOn { 
     TotalFuelOutput2.text = "\(TFO012)" 
    } 
    else if mainbutton.isOn && fwdbutton.isOn { 
     TotalFuelOutput2.text = "\(TFO011)" 
    } 
    else if mainbutton.isOn && aftbutton.isOn { 
     TotalFuelOutput2.text = "\(TFO010)" 
    } 
    else if aftbutton.isOn { 
     TotalFuelOutput2.text = "\(TFO006)" 
    } 
    else if fwdbutton.isOn { 
     TotalFuelOutput2.text = "\(TFO007)" 
    } 
    else if mainbutton.isOn { 
     TotalFuelOutput2.text = "\(TFO004)" 
    } 
    else {TotalFuelOutput2.text = "\(TFO000)"} 


    // *Self Reminder* Calculation for Trip Fuel Adjust with various TDP Loaded 

    if mainbutton.isOn && fwdbutton.isOn && aftbutton.isOn { 
     TripFuelOutput2.text = "\(TripF012)" 
    } 
    else if fwdbutton.isOn && aftbutton.isOn { 
     TripFuelOutput2.text = "\(TripF012)" 
    } 
    else if mainbutton.isOn && fwdbutton.isOn { 
     TripFuelOutput2.text = "\(TripF011)" 
    } 
    else if mainbutton.isOn && aftbutton.isOn { 
     TripFuelOutput2.text = "\(TripF010)" 
    } 
    else if aftbutton.isOn { 
     TripFuelOutput2.text = "\(TripF006)" 
    } 
    else if fwdbutton.isOn { 
     TripFuelOutput2.text = "\(TripF007)" 
    } 
    else if mainbutton.isOn { 
     TripFuelOutput2.text = "\(TripF004)" 
    } 
    else {TripFuelOutput2.text = "\(TripF000)"} 

    //---- 
    let fourthValue = Double(TotalFuelOutput2.text!) 
    let fifthValue = Double(TripFuelOutput2.text!) 

    let RampWeight1 = Double(firstValue! + secondValue!) 
    let TOW1 = Double(RampWeight1 - 1) 
    let LMass1 = (TOW1 - thirdValue!) 

    let RampWeight2 = Double(firstValue! + fourthValue!) 
    let TOW2 = Double(RampWeight2 - 1) 
    let LMass2 = (TOW2 - fifthValue!) 

    // *Self Reminder* Calculation for center figuers with no TDP adjustments 

    RampOutput1.text = "\(RampWeight1)" 
    TOWOutput1.text = "\(TOW1)" 
    LandOutput1.text = "\(LMass1)" 

    // *Self Reminder* Calculation for right hand side figures using new TotalFuelOutput2 & TripFuelOutput2 

    RampOutput2.text = "\(RampWeight2)" 
    TOWOutput2.text = "\(TOW2)" 
    LandOutput2.text = "\(LMass2)" 


} 

我運行程序並檢查輸入。前三個是正確的,然後在按照上面的順序運行計算之前,它會跳到第四個值旁邊。我附上了下面的截圖。

Here

代碼中的運行時錯誤也低於用正確的結果TFO012。 Here

fourthValue should = TFO012值101.2,但在列表中它的2.16095795579922694E-314。它從哪裏收到這個號碼?

再次抱歉給你所有的問題。你已經對我有巨大的幫助,如果認真感謝!

@Sam男,這是一個完整的視圖控制器代碼

// 
// ViewController.swift 
// TDP Calculator 
// 
// Created by Ryan Harris on 24/09/2016. 
// Copyright © 2016 Harris. All rights reserved. 
// 

import UIKit 

class ViewController: UIViewController, UITextFieldDelegate { 

@IBOutlet weak var scrollView: UIScrollView! 

@IBOutlet var mainbutton: UISwitch! 
@IBOutlet var fwdbutton: UISwitch! 
@IBOutlet var aftbutton: UISwitch! 

@IBOutlet var maindeckimage: UIImageView! 
@IBOutlet var fwdholdimage: UIImageView! 
@IBOutlet var aftholdimage: UIImageView! 

@IBOutlet var ZFWinput: UITextField! 
@IBOutlet var TotalFuelinput: UITextField! 
@IBOutlet var TripFuelinput: UITextField! 

@IBOutlet var RampOutput1: UILabel! 
@IBOutlet var TOWOutput1: UILabel! 
@IBOutlet var LandOutput1: UILabel! 

@IBOutlet var Calculate: UIButton! 

@IBOutlet var ZFWOutput2: UILabel! 
@IBOutlet var TotalFuelOutput2: UILabel! 
@IBOutlet var RampOutput2: UILabel! 
@IBOutlet var TOWOutput2: UILabel! 
@IBOutlet var TripFuelOutput2: UILabel! 
@IBOutlet var LandOutput2: UILabel! 

//Switches linked to all cargo bays on profile 

@IBAction func maindeckswitch(_ sender: AnyObject) { 
    if mainbutton.isOn { 
     maindeckimage.isHidden = true 
     mainbutton.setOn(false, animated: true) 
    }else{ 
     maindeckimage.isHidden = false 
     mainbutton.setOn(true, animated: true) 
    } 

} 


@IBAction func fwdholdswitch(_ sender: AnyObject) { 
    if fwdbutton.isOn { 
     fwdholdimage.isHidden = true 
     fwdbutton.setOn(false, animated: true) 
    }else{ 
     fwdholdimage.isHidden = false 
     fwdbutton.setOn(true, animated: true) 
} 

} 


@IBAction func aftholdswitch(_ sender: AnyObject) { 
    if aftbutton.isOn { 
     aftholdimage.isHidden = true 
     aftbutton.setOn(false, animated: true) 
    }else{ 
     aftholdimage.isHidden = false 
     aftbutton.setOn(true, animated: true) 
    } 


} 


override func viewDidLoad() { 
    super.viewDidLoad() 

    //Remove Keyboard with background Touch - Ryan Harris 

    let tapRecognizer = UITapGestureRecognizer() 
    tapRecognizer.addTarget(self, action: #selector(ViewController.didTapView)) 
    self.view.addGestureRecognizer(tapRecognizer) 

} 

//Link function to Keyboard removal 

func didTapView(){ 
    self.view.endEditing(true) 
} 



override func didReceiveMemoryWarning() { 
    super.didReceiveMemoryWarning() 
    // Dispose of any resources that can be recreated. 

} 



// Calculation Code Starts here 

@IBAction func Calculate(_ sender: AnyObject) { 

    let firstValue = Double(ZFWinput.text!) 
    let secondValue = Double(TotalFuelinput.text!) 
    let thirdValue = Double(TripFuelinput.text!) 

    let TFO000 = Double(secondValue!) 
    let TFO004 = Double(secondValue! * 1.004) 
    let TFO006 = Double(secondValue! * 1.006) 
    let TFO007 = Double(secondValue! * 1.007) 
    let TFO010 = Double(secondValue! * 1.01) 
    let TFO011 = Double(secondValue! * 1.011) 
    let TFO012 = Double(secondValue! * 1.012) 

    let TripF000 = Double(thirdValue!) 
    let TripF004 = Double(thirdValue! * 1.004) 
    let TripF006 = Double(thirdValue! * 1.006) 
    let TripF007 = Double(thirdValue! * 1.007) 
    let TripF010 = Double(thirdValue! * 1.10) 
    let TripF011 = Double(thirdValue! * 1.11) 
    let TripF012 = Double (thirdValue! * 1.12) 


    // *Self Reminder* Calculation for Total Fuel Adjustment with various TDP Loaded 

    if mainbutton.isOn && fwdbutton.isOn && aftbutton.isOn { 
     TotalFuelOutput2.text = "\(TFO012)" 
    } 
    else if fwdbutton.isOn && aftbutton.isOn { 
     TotalFuelOutput2.text = "\(TFO012)" 
    } 
    else if mainbutton.isOn && fwdbutton.isOn { 
     TotalFuelOutput2.text = "\(TFO011)" 
    } 
    else if mainbutton.isOn && aftbutton.isOn { 
     TotalFuelOutput2.text = "\(TFO010)" 
    } 
    else if aftbutton.isOn { 
     TotalFuelOutput2.text = "\(TFO006)" 
    } 
    else if fwdbutton.isOn { 
     TotalFuelOutput2.text = "\(TFO007)" 
    } 
    else if mainbutton.isOn { 
     TotalFuelOutput2.text = "\(TFO004)" 
    } 
    else {TotalFuelOutput2.text = "\(TFO000)"} 


    // *Self Reminder* Calculation for Trip Fuel Adjust with various TDP Loaded 

    if mainbutton.isOn && fwdbutton.isOn && aftbutton.isOn { 
     TripFuelOutput2.text = "\(TripF012)" 
    } 
    else if fwdbutton.isOn && aftbutton.isOn { 
     TripFuelOutput2.text = "\(TripF012)" 
    } 
    else if mainbutton.isOn && fwdbutton.isOn { 
     TripFuelOutput2.text = "\(TripF011)" 
    } 
    else if mainbutton.isOn && aftbutton.isOn { 
     TripFuelOutput2.text = "\(TripF010)" 
    } 
    else if aftbutton.isOn { 
     TripFuelOutput2.text = "\(TripF006)" 
    } 
    else if fwdbutton.isOn { 
     TripFuelOutput2.text = "\(TripF007)" 
    } 
    else if mainbutton.isOn { 
     TripFuelOutput2.text = "\(TripF004)" 
    } 
    else {TripFuelOutput2.text = "\(TripF000)"} 

    //---- 
    let fourthValue = Double(TotalFuelOutput2.text!) 
    let fifthValue = Double(TripFuelOutput2.text!) 

    let RampWeight1 = Double(firstValue! + secondValue!) 
    let TOW1 = Double(RampWeight1 - 1) 
    let LMass1 = (TOW1 - thirdValue!) 

    let RampWeight2 = Double(firstValue! + fourthValue!) 
    let TOW2 = Double(RampWeight2 - 1) 
    let LMass2 = (TOW2 - fifthValue!) 

    // *Self Reminder* Calculation for center figuers with no TDP adjustments 

    RampOutput1.text = "\(RampWeight1)" 
    TOWOutput1.text = "\(TOW1)" 
    LandOutput1.text = "\(LMass1)" 

    // *Self Reminder* Calculation for right hand side figures using new TotalFuelOutput2 & TripFuelOutput2 

    RampOutput2.text = "\(RampWeight2)" 
    TOWOutput2.text = "\(TOW2)" 
    LandOutput2.text = "\(LMass2)" 


} 




} 
+0

這將有助於瞭解如何您fourthValue和fifthValue指定的線路不工作。代碼是否不能編譯?或者你有運行時錯誤?無論哪種情況,錯誤是什麼? – Fahim

+0

Appologies,我得到一個線路上的運行時錯誤......讓RampWeight2 =雙(firstValue!+ fourthValue!)說THRED 1:EXC_BAD_INSTRUCTION(代碼= EXC_I386_INVOP,子代碼= 0x0) – RyanHK

+0

請參閱http:// www。 raywenderlich.com/10209/my-app-crashed-now-what-part-1以瞭解如何調試崩潰。請確保使用導致錯誤的實際代碼更新您的問題。 – rmaddy

回答

0

在您設置TripFuelOutput2.textTotalFuelOutput2.text值之前,您正在聲明和使用fourthValuefifthValue。在所有if-else之後,您應該移動涉及fourthValuefifthValue的聲明和計算,以便設置TripFuelOutput2.textTotalFuelOutput2.text值。

修改你的代碼是這樣的:

@IBAction func Calculate(_ sender: AnyObject) { 

    let firstValue = Double(ZFWinput.text!) 
    let secondValue = Double(TotalFuelinput.text!) 
    let thirdValue = Double(TripFuelinput.text!) 

    let TFO000 = Double(secondValue!) 
    let TFO004 = Double(secondValue! * 1.004) 
    let TFO006 = Double(secondValue! * 1.006) 
    let TFO007 = Double(secondValue! * 1.007) 
    let TFO010 = Double(secondValue! * 1.01) 
    let TFO011 = Double(secondValue! * 1.011) 
    let TFO012 = Double(secondValue! * 1.012) 

    let TripF000 = Double(thirdValue!) 
    let TripF004 = Double(thirdValue! * 1.004) 
    let TripF006 = Double(thirdValue! * 1.006) 
    let TripF007 = Double(thirdValue! * 1.007) 
    let TripF010 = Double(thirdValue! * 1.10) 
    let TripF011 = Double(thirdValue! * 1.11) 
    let TripF012 = Double (thirdValue! * 1.12) 


    // *Self Reminder* Calculation for Total Fuel Adjustment with various TDP Loaded 

    if mainbutton.isOn && fwdbutton.isOn && aftbutton.isOn { 
     TotalFuelOutput2.text = "\(TFO012)" 
    } 
    else if fwdbutton.isOn && aftbutton.isOn { 
     TotalFuelOutput2.text = "\(TFO012)" 
    } 
    else if mainbutton.isOn && fwdbutton.isOn { 
     TotalFuelOutput2.text = "\(TFO011)" 
    } 
    else if mainbutton.isOn && aftbutton.isOn { 
     TotalFuelOutput2.text = "\(TFO010)" 
    } 
    else if aftbutton.isOn { 
     TotalFuelOutput2.text = "\(TFO006)" 
    } 
    else if fwdbutton.isOn { 
     TotalFuelOutput2.text = "\(TFO007)" 
    } 
    else if mainbutton.isOn { 
     TotalFuelOutput2.text = "\(TFO004)" 
    } 
    else {TotalFuelOutput2.text = "\(TFO000)"} 


    // *Self Reminder* Calculation for Trip Fuel Adjust with various TDP Loaded 

    if mainbutton.isOn && fwdbutton.isOn && aftbutton.isOn { 
     TripFuelOutput2.text = "\(TripF012)" 
    } 
    else if fwdbutton.isOn && aftbutton.isOn { 
     TripFuelOutput2.text = "\(TripF012)" 
    } 
    else if mainbutton.isOn && fwdbutton.isOn { 
     TripFuelOutput2.text = "\(TripF011)" 
    } 
    else if mainbutton.isOn && aftbutton.isOn { 
     TripFuelOutput2.text = "\(TripF010)" 
    } 
    else if aftbutton.isOn { 
     TripFuelOutput2.text = "\(TripF006)" 
    } 
    else if fwdbutton.isOn { 
     TripFuelOutput2.text = "\(TripF007)" 
    } 
    else if mainbutton.isOn { 
     TripFuelOutput2.text = "\(TripF004)" 
    } 
    else {TripFuelOutput2.text = "\(TripF000)"} 

    //---- 
    let fourthValue = Double(TotalFuelOutput2.text!) 
    let fifthValue = Double(TripFuelOutput2.text!) 

    let RampWeight1 = Double(firstValue! + secondValue!) 
    let TOW1 = Double(RampWeight1 - 1) 
    let LMass1 = (TOW1 - thirdValue!) 

    let RampWeight2 = Double(firstValue! + fourthValue!) 
    let TOW2 = Double(RampWeight2 - 1) 
    let LMass2 = (TOW2 - fifthValue!) 

    // *Self Reminder* Calculation for center figuers with no TDP adjustments 

    RampOutput1.text = "\(RampWeight1)" 
    TOWOutput1.text = "\(TOW1)" 
    LandOutput1.text = "\(LMass1)" 

    // *Self Reminder* Calculation for right hand side figures using new TotalFuelOutput2 & TripFuelOutput2 

    RampOutput2.text = "\(RampWeight2)" 
    TOWOutput2.text = "\(TOW2)" 
    LandOutput2.text = "\(LMass2)" 

} 
0

檢查由文本字段返回的值。確保它們不是零,並且可以適當地轉換爲雙浮點數的合適範圍內的數字,從第一個字符開始(沒有前導空格等)。否則Double()轉換可能會引發錯誤。