2016-04-12 27 views
-2

Mein JavaScript-Code ist:Javascript Mergesort - Wörter in alphabetischer Reihenfolge

$("#yes").click(function() { mergeSort(arr); }); 



function mergeSort(arr) 
{ 
var arr = getDataFromInput(); 
    if (arr.length < 2) 
     return arr; 

    var middle = parseInt(arr.length/2); 
    var left = arr.slice(0, middle); 
    var right = arr.slice(middle, arr.length); 

    return merge(mergeSort(left), mergeSort(right)); 
} 

function merge(left, right) 
{ 
    var result = []; 

    while (left.length && right.length) { 
     if (left[0] <= right[0]) { 
      result.push(left.shift()); 
     } else { 
      result.push(right.shift()); 
     } 
    } 

    while (left.length) 
     result.push(left.shift()); 

    while (right.length) 
     result.push(right.shift()); 
    writeResultToOutput(result); 
} 
function getDataFromInput() { 
    return $("#w").val(); 
} 

function writeResultToOutput(resultHTML) { 
    $("#z").html(resultHTML); 
} 

Mein html ist:

<body> 

    <label for="w">entry information</label><br> 
    <textarea rows="40" cols="100" name="w" id="w"></textarea> 



    Results 
    <div id="z"></div> 



    <button id="yes">Begin!</button> 

</body> 

Theoretisch ist Ziel dieses jedoch mit mergesort in alphabetischer Reihenfolge zu sortieren, wenn ich irgendeine Art Wörter wie "Luftfeld gelangweilt" und Presse beginnen nichts passiert wirklich. Was ist falsch an diesem Code? Fehler i erhalten haben:

ReferenceError: $ is not defined

Ich bin mir bewusst, html nicht richtig JavaScript verknüpft ist, aber das ist kein Problem, da offensichtlich ich weiß, wie diese beiden zu verbinden.

Ich werde Ihnen den vollständigen Code geben nach Änderungen ist (Fehler verschwunden ist, aber immer noch keine Worte nicht sortiert):

<!DOCTYPE html> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
<script type="text/javascript" src="jquery-1.10.2.min.js"></script> 
<script type="text/javascript"> 
    $("#yes").click(function() { mergeSort(arr); }); 



function mergeSort(arr) 
{ 
var arr = getDataFromInput(); 
    if (arr.length < 2) 
     return arr; 

    var middle = parseInt(arr.length/2); 
    var left = arr.slice(0, middle); 
    var right = arr.slice(middle, arr.length); 

    return merge(mergeSort(left), mergeSort(right)); 
} 

function merge(left, right) 
{ 
    var result = []; 

    while (left.length && right.length) { 
     if (left[0] <= right[0]) { 
      result.push(left.shift()); 
     } else { 
      result.push(right.shift()); 
     } 
    } 

    while (left.length) 
     result.push(left.shift()); 

    while (right.length) 
     result.push(right.shift()); 
    writeResultToOutput(result); 
} 
function getDataFromInput() { 
    return $("#w").val(); 
} 

function writeResultToOutput(resultHTML) { 
    $("#z").html(resultHTML); 
} 
</script> 
</head> 
<body> 

    <label for="w">entry information</label><br> 
    <textarea rows="40" cols="100" name="w" id="w"></textarea> 



    Results 
    <div id="z"></div> 



    <button id="yes">Begin!</button> 

</body> 
</html> 

Was will ich als arr verwenden, die eine Eingabe von dem Niveau des Browsers ist, ich meine, : enter image description here

Neueste Version:

<!DOCTYPE html> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 


</head> 
<body> 

    <label for="w">entry information</label><br> 
    <textarea rows="40" cols="100" name="w" id="w"></textarea> 



    Results 
    <div id="z"></div> 



    <button id="yes">Begin!</button> 
<script type="text/javascript" src="jquery-1.10.2.min.js"></script> 
<script type="text/javascript"> 
$("#yes").click(function() { 
     var arr = getDataFromInput(); 
     mergeSort(arr); 
}); 


function mergeSort(arr) 
{ 

    if (arr.length < 2) 
     return arr; 

    var middle = parseInt(arr.length/2); 
    var left = arr.slice(0, middle); 
    var right = arr.slice(middle, arr.length); 

    return merge(mergeSort(left), mergeSort(right)); 
} 

function merge(left, right) 
{ 
    var result = []; 

    while (left.length && right.length) { 
     if (left[0] <= right[0]) { 
      result.push(left.shift()); 
     } else { 
      result.push(right.shift()); 
     } 
    } 

    while (left.length) 
     result.push(left.shift()); 

    while (right.length) 
     result.push(right.shift()); 
    writeResultToOutput(result); 
} 
function getDataFromInput() { 
    return $("#w").val(); 
} 

function writeResultToOutput(resultHTML) { 
    $("#z").html(resultHTML); 
} 
</script> 
</body> 
</html> 

Noch immer keine gültige Ausgabe, ich meine keine Ausgabe überhaupt

+0

Haben Sie versucht, F12 zu drücken? –

+0

ReferenceError: $ ist nicht definiert - das ist, was ich in einer Konsole habe, aber ich habe keine Ahnung, wie das zu beheben ist. – mkropkowski

+0

Setzen Sie das Skript, das in jQuery geladen wird, vor den Code. –

Antwort

0

ReferenceError: $ is not defined bedeutet jQuery ist nicht enthalten oder der Code geschrieben wird, bevor jQuery auf Ihrer Seite

Fügen jQuery Bibliothek mit und versuchen Sie es erneut http://code.jquery.com/jquery-1.10.2.min.js

EDIT

Sie benötigen unsere Funktion wie folgt aufrufen

$("#yes").click(function() { 
     var arr = getDataFromInput(); 
     mergeSort(arr); 
}); 

und entfernen var arr = getDataFromInput(); her m MergeSort funktionieren

function mergeSort(arr) 
{ 
//var arr = getDataFromInput(); this line is removed 
if (arr.length < 2) 
     return arr; 
+0

Ich habe die Bibliothek hinzugefügt und funktioniert immer noch nicht richtig. – mkropkowski

+0

Was ist der Fehler, den Sie jetzt bekommen? –

+0

Keine Fehler in der Browser-Konsole. – mkropkowski

1

Für den Anfang:

Ihr Skript vor Ihrem HTML. Es beginnt zu laufen, bevor es gerendert wird. Wenn Sie es im HTML-Code belassen möchten, fügen Sie es vor dem body-closing-Tag ein.

für eine Funktion auf Klick ausgeführt wird, können Sie es wie folgt tun:

$("#yes").click(mergeSort()); 

keine Notwendigkeit, eine anonyme Funktion auszuführen. Du hast bereits einen Namen. Und Sie versuchen, einen Parameter zu übergeben, den Sie nicht zuvor erstellt haben. Die "var arr" ist in einer Funktion. Beginnen Sie, diese Dinge zu überprüfen und von dort aus zu gehen. Ich werde später hier sein.

Ich hoffe, es hilft Ihnen.

+0

Ich habe Skriptumgebung direkt vor dem body closing Tag verschoben, ich habe die Funktion geändert click, aber wenn es zu "var arr" kommt, wenn ich es über die Funktion verschieben, habe ich den Fehler, dass arr ist undefined ... – mkropkowski

+0

I tut mir leid. Es ist: $ ("# ja"). Click (mergeSort); Nein "()" nach dem Namen Ihrer Funktion. Aber pass auf deine Loops auf. Sie können unendlich sein. Und ... Sie können die "var arr" innerhalb der Funktion lassen, wenn es dort ist, dass Sie es erstellen möchten. Benutze es einfach nicht aus der Funktion heraus, da es nicht den gleichen Umfang hat. Sie müssen es nicht vorher erstellen, wenn Sie bis zum Klicken warten, um einen Wert zu erhalten. –

Verwandte Themen