2017-10-19 2 views
0

mein Code wird nicht in der Konsole gedruckt. Ich habe ein paar Methoden ausprobiert, aber nichts funktioniert. Der folgende Code ist die Vollversion des Codes, die dazu führen könnte, dass der Druck in der Konsole nicht angezeigt wird. Bitte helfen Sie mir, dieses kleine Problem zu identifizieren. Ich habe versucht, so viele Methoden wie möglich zu verwenden, um dieses Problem zu beheben, aber ohne Erfolg.Druck wird nicht in der Konsole angezeigt (swift)

Dies ist mein Code:

import Foundation 

// Function to calculate the arithmetic mean 

func arithmeticMean(array: [Double]) -> Double { 
    var total: Double = 0 
    for number in array { 
     total += number 
    } 
    return total/Double(array.count) 
} 

// Function to calculate the standard deviation 

func standardDeviation(array: [Double]) -> Double 
{ 
    let length = Double(array.count) 
    let avg = array.reduce(0, {$0 + $1})/length 
    let sumOfSquaredAvgDiff = array.map { pow($0 - avg, 2.0)}.reduce(0, {$0 + $1}) 
    return sqrt(sumOfSquaredAvgDiff/length) 
} 

// Function to extract some range from an array 

func subArray<T>(array: [T], s: Int, e: Int) -> [T] { 
    if e > array.count { 
     return [] 
    } 
    return Array(array[s..<min(e, array.count)]) 
} 

// Smooth z-score thresholding filter 

func ThresholdingAlgo(y: [Double],lag: Int,threshold: Double,influence: Double) -> ([Int],[Double],[Double]) { 

    // Create arrays 
    var signals = Array(repeating: 0, count: y.count) 
    var filteredY = Array(repeating: 0.0, count: y.count) 
    var avgFilter = Array(repeating: 0.0, count: y.count) 
    var stdFilter = Array(repeating: 0.0, count: y.count) 

    // Initialise variables 
    for i in 0...lag-1 { 
     signals[i] = 0 
     filteredY[i] = y[i] 
    } 

    // Start filter 
    avgFilter[lag-1] = arithmeticMean(array: subArray(array: y, s: 0, e: lag-1)) 
    stdFilter[lag-1] = standardDeviation(array: subArray(array: y, s: 0, e: lag-1)) 

    for i in lag...y.count-1 { 
     if abs(y[i] - avgFilter[i-1]) > threshold*stdFilter[i-1] { 
      if y[i] > avgFilter[i-1] { 
       signals[i] = 1  // Positive signal 
      } else { 
       // Negative signals are turned off for this application 
       signals[i] = -1  // Negative signal 
      } 
      filteredY[i] = influence*y[i] + (1-influence)*filteredY[i-1] 
     } else { 
      signals[i] = 0   // No signal 
      filteredY[i] = y[i] 
     } 
     // Adjust the filters 
     avgFilter[i] = arithmeticMean(array: subArray(array: filteredY, s: i-lag, e: i)) 
     stdFilter[i] = standardDeviation(array: subArray(array: filteredY, s: i-lag, e: i)) 
    } 
    return (signals,avgFilter,stdFilter) 
} 


func viewDidLoad() 
{ 

// Demo 

let samples = [0.01, -0.02, -0.02, 0.01, -0.01, -0.01, 0.00, 0.10, 0.31, 
       -0.10, -0.73, -0.68, 0.21, 1.22, 0.67, -0.59, -1.04, 0.06, 0.42, 0.07, 
       0.03, -0.18, 0.11, -0.06, -0.02, 0.16, 0.21, 0.03, -0.68, -0.89, 0.18, 
       1.31, 0.66, 0.07, -1.62, -0.16, 0.67, 0.19, -0.42, 0.23, -0.05, -0.01, 
       0.03, 0.06, 0.27, 0.15, -0.50, -1.18, 0.11, 1.30, 0.93, 0.16, -1.32, 
       -0.10, 0.55, 0.23, -0.03, -0.23, 0.16, -0.04, 0.01, 0.12, 0.35, -0.38, 
       -1.11, 0.07, 1.46, 0.61, -0.68, -1.16, 0.29, 0.54, -0.05, 0.02, -0.01, 
       0.12, 0.23, 0.29, -0.75, -0.95, 0.11, 1.51, 0.70, -0.30, -1.48, 0.13, 
       0.50, 0.18, -0.06, -0.01, -0.02, 0.03, -0.02, 0.06, 0.03, 0.03, 0.02, 
       -0.01, 0.01, 0.02, 0.01] 

// Run filter 

let (signals,avgFilter,stdFilter) = ThresholdingAlgo(y: samples, lag: 10, threshold: 3, influence: 0.2) 

// Print output to console 
print("\nOutput: \n ") 

    for i in 0...signals.count - 1 
    { 
     print("Data point \(i)\t\t sample: \(samples[i]) \t signal: \(signals[i])\n") 
    } 

    // Raw data for creating a plot in Excel 
    print("\n \n Raw data for creating a plot in Excel: \n ") 
    for i in 0...signals.count - 1 
    { 
     print("\(i+1)\t\(samples[i])\t\(signals[i])\t\(avgFilter[i])\t\(stdFilter[i])\n") 
    } 
} 

Ihre Hilfe sehr geschätzt wird! Ich habe den gesamten Code hinzugefügt, damit das Problem behoben werden kann.

+0

Sie sollten den Wert von 'signals.count' vor Ihren' print' Anweisungen drucken. Vielleicht ist es Null, in diesem Fall druckt nichts. Aber wir wissen nicht was es ist. –

+0

Ich habe diese Methode versucht aber noch das Problem zu lösen. Vielen Dank für Ihre Antwort. – user8555346

Antwort

0

Wahrscheinlich ist das Array der Signale leer, daher wird die Schleife nicht ausgeführt. Vielleicht wollten Sie "samples.cout-1" statt "Signale" setzen?

+0

Ich habe diese Methode auch versucht, aber das Ergebnis ist das gleiche. Trotzdem Danke. – user8555346

1

Ok vielleicht habe ich Ihr Problem gefunden. Funktion viewDidLoad in keiner Klasse, und es übertrifft keine Delegate-Methoden. Das bedeutet, dass es nicht automatisch aufgerufen wird, wenn die Ansicht angezeigt wird.

Beispiel

class ViewController: UIViewController { 

override func viewDidLoad() { 
    super.viewDidLoad() // the view did load gets called when view appears 
    // Do any additional setup after loading the view, typically from a nib. 
} 
} 

In diesem Fall unsere Klasse lädt, wenn die Ansicht angezeigt wird, aber Sie funktionieren viewDidLoad ist innerhalb jeder Klasse nicht.

Verwandte Themen