Webdesign in Siegen

Angefangen Java zu lernen - Die ersten Startschwierigkeiten

Fragen zum Thema JavaScript können hier gestellt werden

Moderatoren: Basti, Ingo

Angefangen Java zu lernen - Die ersten Startschwierigkeiten

Beitragvon Cell am 03.04.2008, 12:26

Also gut, habe angefangen Java zu lernen, aus nem guten Grund.

So ich habe mir mal als erstes ziel gesetzt, n Array aus 100 random Zahlen zwischen 0 und 1000 zu erstellen, welches ich nachher sortieren lasse, nicht mit ner sortier Funktion, die schreibe ich mir auch selber, will ja schliesslich was lernen ;)


Nur leider gibt er mir irgend n Mist aus, und nicht das, was ich erhofft habe.

Hier mal der Code:
Code: Alles auswählen
import java.util.Random;

public class Array
{
    // \/ Variablen \/
    Random x = new Random();
    int list[] = new int[100];
    int zufallszahl;
    // \/ Konstruktor \/
    public Array(){
        for(int i=0; i<99; i++){
            zufallszahl = x.nextInt(1000);
            list[i] = zufallszahl;
        System.out.println(list); // Testen ob richtig generiert wird
       }
    }
   
    //public void sort(){
    //}
}


Ausgabe von dem Code:
Code: Alles auswählen
[I@2d189c
[I@2d189c
[I@2d189c
[I@2d189c
[I@2d189c
[I@2d189c
[I@2d189c
[I@2d189c
[I@2d189c
[I@2d189c
[I@2d189c
[I@2d189c
[I@2d189c
[I@2d189c
[I@2d189c
[I@2d189c
[I@2d189c
[I@2d189c
[I@2d189c
[I@2d189c
[I@2d189c
[I@2d189c
[I@2d189c
[I@2d189c
[I@2d189c
[I@2d189c
[I@2d189c
[I@2d189c
[I@2d189c
[I@2d189c
[I@2d189c
[I@2d189c
[I@2d189c
[I@2d189c
[I@2d189c
[I@2d189c
[I@2d189c
[I@2d189c
[I@2d189c
[I@2d189c
[I@2d189c
[I@2d189c
[I@2d189c
[I@2d189c
[I@2d189c
[I@2d189c
[I@2d189c



Weiß echt nicht was das soll, bin auch ehrlich gesagt hier und da etwas verwirrt, habe vorher nur minimal PHP gescripted und relativ oft was mit Python gemacht, aber Python ist so smart, danach hat man nur Grundlagen drauf ^^


Edit: Ahh habe das Problem selber gefunden, habe gemerkt das Java es net mag Arrays ausgeben zu lassen, also hab ich einfach es per For schleife ausgeben lassen. Klappt jetzt wunderbar! Danke trotzdem ;) Werde bestimmt nochmal hier nachfragen :D
Buh :p
Benutzeravatar
Cell
Mitglied
 
Beiträge: 685
Registriert: 13.08.2005, 23:50
Wohnort: Nähe Münster

Re: Angefangen Java zu lernen - Die ersten Startschwierigkeiten

Beitragvon Ingo am 03.04.2008, 12:43

Hi. Nun also doch Java ;o)

Mein erster Gedanke (+ Blick auf die sun-Doku): println kann Arrays möglicherweise nicht direkt
ausgeben, sondern nur die Einzelwerte. Der Wert, den er da auswirft, ist wohl sowas wie ein Zeiger
auf das Array, deswegen ist der auch immer gleich. - Vllt. geht's ja so (Array elementweise ausgeben):
Code: Alles auswählen
System.out.println(list[i])


Gruß, Ingo :)

PS: Nur am Rande und nur der Klarheit wegen: Java und JavaScript haben kaum etwas miteinander zu tun.
PPS: zu spät - ich sollte schneller schreiben ;o)
Die beste Browserweiche ... sitzt zwischen den Ohren ;o]
Benutzeravatar
Ingo
Moderator
 
Beiträge: 434
Registriert: 01.04.2007, 23:21
Wohnort: Neuss/NRW

Re: Angefangen Java zu lernen - Die ersten Startschwierigkeiten

Beitragvon Cell am 03.04.2008, 13:27

Oh, darf ich also nicht hier rein? Oder ist das kein Problem?
Buh :p
Benutzeravatar
Cell
Mitglied
 
Beiträge: 685
Registriert: 13.08.2005, 23:50
Wohnort: Nähe Münster

Re: Angefangen Java zu lernen - Die ersten Startschwierigkeiten

Beitragvon Cell am 03.04.2008, 16:41

Okay gut, bin gerade dabei mit nem Algorythmus die Sortierung anzufangen. Habe das ganze bei Wikipedia rausgesucht als Pseudocode, deswegen hier und da evtl noch falsche bezeichnungen, aber ansich sollte das so "schon klappen".

Die Funktion zum sortieren sieht bis jetz wie folgt aus:
Code: Alles auswählen
//-------- \/ Variablen die im Konstruktor benutzt werden \/ ----------
     int less[] = new int[list.length];
     int equal[] = new int[list.length];
     int greater[] = new int[list.length];
     int pivot = list.length/2;
    //------------------------- \/ Konstruktor \/ -------------------------
    public int sort(){
     if(list.length <= 1){
         return list[list.length];
        }
     for(int i;i<=list.length; i++){
         if (i < pivot){
             append(int[x] less, x); //Appends var X to less list  <<< Habe gelesen, dass man damit Arrays "verlängern" und somit Werte hinzufügen und anhängen kann, stimmt das?
            }
         if (i == pivot){
             equal.add(x); //Appends var X to equal list  <<<< Das hier war meine erste Idee, mit add zu arbeiten, geht leider net bei Arrays
            }
         if (i > pivot){
             greater.add(x); //Appends var X to greater list  <<<< Das hier war meine erste Idee, mit add zu arbeiten, geht leider net bei Arrays
            }   
        }
     // pseudo : return concatenate(quicksort(less), equal, quicksort(greater)) <- Das habe ich selbst noch net ganz verstanden, aber mich auch noch net genau mit befasst! Deswegen erstmal ausser acht lassen!
    }



Zum veranschaulichen des Algorythmus, wie er funktioniert gibts auf Wikipedia ne kleine Grafik, hier mal der Link dazu, will ja nichts Verbrechen ;):

http://en.wikipedia.org/wiki/Image:Sorting_quicksort_anim.gif

Zum Code:
Also mir gehts nur darum, wie im Quelltext kommentiert, wie kann ich n Array neue Werte hinzufügen? Problem ist halt, dass das Array anfangs ja n Wert zugewiesen kriegt wieviele Stellen es hat, geht das überhaupt so? Oder sollte ich da eher was andres benutzen? Ne' Liste oder sowas?

Jaja, die Anfangsschwierigkeiten....
Buh :p
Benutzeravatar
Cell
Mitglied
 
Beiträge: 685
Registriert: 13.08.2005, 23:50
Wohnort: Nähe Münster

Re: Angefangen Java zu lernen - Die ersten Startschwierigkeiten

Beitragvon Eyecatcher am 03.04.2008, 16:50

Hey, man könnte ja noch nen extra Java Forum eröffnen^^
Zu 1: Ihr habt beide Recht, man muss Java den direkten Zeiger auf das Arrayelement mitgeben, dass was du da ausgegeben hast, ist die Adresse zum Objekt im Arbeitsspeicher/VM Speicher...
Zu 2: Du kannst dem Array erstmal einen hohen Wert zukommen lassen, zB int[] zahl = new int[9999], das ist erstmal das leichteste! Dann gibts noch die Möglichkeit ein extra Obejkt in Form einer eigenen Klasse anzulegen und diese dann mithilfe von Zeigern auf das jeweils nächste Element verweisen zu lassen. Dazu kannst du dich unter dem Begriff "Stack / Abstrakte Datentypen" informieren. Zu den Suchalgorhithmen such nach Bubblesort, Shakersort, Selectionssort, Inversionssort, die sind für den Start am einfachsten! Viel Glück ;)
Demnächst: php-studio.com
Benutzeravatar
Eyecatcher
Mitglied
 
Beiträge: 249
Registriert: 01.03.2008, 21:56
Wohnort: Espelkamp

Re: Angefangen Java zu lernen - Die ersten Startschwierigkeiten

Beitragvon Cell am 03.04.2008, 16:57

Ahh danke für die Antwort!

Weißt du auf die schnelle die Funktion um nen Wert ans Ende des Arrays zu packen?
Buh :p
Benutzeravatar
Cell
Mitglied
 
Beiträge: 685
Registriert: 13.08.2005, 23:50
Wohnort: Nähe Münster

Re: Angefangen Java zu lernen - Die ersten Startschwierigkeiten

Beitragvon nicolas.mn am 03.04.2008, 16:58

@Eyecatcher
Gute Idee, je mehr Bereiche abgedeckt werden, desto mehr User wird es wohl geben...
Ausserdem gehört Java sogar fast dazu, denke ich...
Du willst sehen was ich kann? Schau's dir an! // Bald stolzer Besitzer eines MacBook's!
Benutzeravatar
nicolas.mn
Mitglied
 
Beiträge: 290
Registriert: 10.06.2007, 18:02
Wohnort: Krefeld

Re: Angefangen Java zu lernen - Die ersten Startschwierigkeiten

Beitragvon Cell am 03.04.2008, 17:14

Okay ich mache es jetz mit ner ArrayList. Jetzt mag er auch das hinzufügen.. Jetz kommt nurnoch der restliche Teil vom Code, naemlich der Pseudo der unten drunter stand.. habe das ma wieder entkommentiert, jetz meckert er wie folgt rum:

sort() in Array cannot be applied to (java.util.ArrayList<java.lang.Integer>)

The operator that you use here cannot be used for the taype of value you are using it for. You are either using the wrong type here or the wrong operator.


Hat das was mit String, Integer etc zu tun?
Buh :p
Benutzeravatar
Cell
Mitglied
 
Beiträge: 685
Registriert: 13.08.2005, 23:50
Wohnort: Nähe Münster

Re: Angefangen Java zu lernen - Die ersten Startschwierigkeiten

Beitragvon Eyecatcher am 03.04.2008, 18:16

Müsste den Quelltext sehen um dir genau zu helfen. Es gibt scheinbar nen Problem zwischen der Methode sort() und deiner Arraylist, falscher Datentyp etc, kann ich so nicht genau sagen.

Edit: Hab mich nochmal oben bei dir eingelesen, machs doch einfach so. Du erzeugst im Konstruktor ne Laufvariable (int count = 0;) und jedes Mal wenn du was in den Array hinzufügst (zahl[count] = x;) erhöhste die Variable (count++;)
Demnächst: php-studio.com
Benutzeravatar
Eyecatcher
Mitglied
 
Beiträge: 249
Registriert: 01.03.2008, 21:56
Wohnort: Espelkamp

Re: Angefangen Java zu lernen - Die ersten Startschwierigkeiten

Beitragvon Cell am 03.04.2008, 19:10

Hmm habe jetz versucht das anders zu lösen, gibt nur kleines Problemchen:

Code:
Code: Alles auswählen
    //-------- \/ Variablen die im Konstruktor benutzt werden \/ ----------
     ArrayList<Integer> less = new ArrayList<Integer>();
     ArrayList<Integer> equal = new ArrayList<Integer>();
     ArrayList<Integer> greater = new ArrayList<Integer>();
     int new_less[] = new int[100];
     //int less[] = new int[list.length];
     //int equal[] = new int[list.length];
     //int greater[] = new int[list.length];
     int pivot = list.length/2;
    //------------------------- \/ Konstruktor \/ -------------------------
    public int sort(){
     if(list.length <= 1){
         return list[list.length];
        }
     for(int i=0;i<=list.length; i++){
         if (i < pivot){
             less.add(i);
             //System.out.println("Content of less: " + less);
            //append(int[x] less, x); //Appends var X to less list
            }
         if (i == pivot){
             equal.add(i); //Appends var X to equal list
             //System.out.println("Content of equal: " + equal);
             //append(int[x] less, x); //Appends var X to less list             
            }
         if (i > pivot){
             greater.add(i); //Appends var X to greater list
             //System.out.println("Content of greater: " + greater);
             //append(int[x] less, x); //Appends var X to less list             
            }   
        }
     return (sort(less), equal, sort(greater));
    }
}



Unten beim return, das mag er nicht ausführen, da sagt er:

')' expected


Ich glaube das ist ne Falsche fehlerdefinition oder? Die irgendwie auftritt, weil er mit Sort oder so nicht klar kommt?
Buh :p
Benutzeravatar
Cell
Mitglied
 
Beiträge: 685
Registriert: 13.08.2005, 23:50
Wohnort: Nähe Münster

Re: Angefangen Java zu lernen - Die ersten Startschwierigkeiten

Beitragvon Eyecatcher am 03.04.2008, 21:18

Da ich durch deinen Code überhaupt nicht durchsteige und ihn viel zu kompliziert finde, habe ich mal grad selber ne Sortierfunktion geschrieben, so wie du sie oben haben wolltest, hoffe die hilft dir, find sie so recht einfach. Wenn du was nicht verstehst einfach schreien ;D
Code: Alles auswählen
import java.util.Random;

public class Sort
{
    int[] liste = new int[100];
   
    public Sort()
    {
        // Im Konstruktor wird die Liste mit 100 Zufallszahlen (1-1000) erzeugt
        Random x = new Random();
        for(int l=0; l<100; l++)
            liste[l] = x.nextInt(1000);
    }
   
    public void bubblesort()
    {
        // Hier wird nach dem Verfahren des Bubblesort sortiert
        for(int l=0; l<100; l++)
        {
            for(int i=0; i<99; i++)
            {
                if(liste[i+1] < liste[i])
                {
                    int temp = liste[i+1];
                    liste[i+1] = liste[i];
                    liste[i] = temp;
                }
            }
        }
    }
}
Demnächst: php-studio.com
Benutzeravatar
Eyecatcher
Mitglied
 
Beiträge: 249
Registriert: 01.03.2008, 21:56
Wohnort: Espelkamp

Re: Angefangen Java zu lernen - Die ersten Startschwierigkeiten

Beitragvon Cell am 07.04.2008, 16:56

Danke eye, habs jetz fertig!

Nun mal ne neue frage, diesmal zu JavaScript!

Code: Alles auswählen
var newMouseYPos = (height-(height/2))-(event.MouseY)


Mag Javascript das nicht, wenn ich ihn gut rechnen lasse bei ner variable?

Wenn ich nur height reinschreibe oder sowas, gehts wunderbar, so sagt er NaN (denke das steht für Non available Number? )

Danke schonmal!
Buh :p
Benutzeravatar
Cell
Mitglied
 
Beiträge: 685
Registriert: 13.08.2005, 23:50
Wohnort: Nähe Münster

Re: Angefangen Java zu lernen - Die ersten Startschwierigkeiten

Beitragvon Ingo am 07.04.2008, 20:25

Hi.
Das Rechnen sollte kein Problem sein. In dieser Hinsicht ist JS ne ganz normale Sprache mit Operatoren
und Präzedenzregeln etc. Aber: Soweit ich sehen kann, hat das event-Objekt in keinem "normalen" Browser
die Eigenschaft "MouseY". Auch das "height" ist irgendwie so nicht definiert. - Ich benutze als Startpunkt für
Experimente gerne folgenden Abschnitt:

Code: Alles auswählen
function doit(ev)
{
     // sicherstellen, dass ev das Event-Objekt enthält
     if(!ev) var ev = window.event;

     // Mit event-Eigenschaften experimentieren
     alert(ev.clientY);
}

HTML:      <div onclick="doit(event);">hier</div>


Worum geht's denn so? Soll die Maus per Skript verschoben werden?
Gruß, Ingo :) ...(vom Fieber gebeutelt)

PS. NaN = Not a Number (Eigenschaft des Number-Objekts)
Die beste Browserweiche ... sitzt zwischen den Ohren ;o]
Benutzeravatar
Ingo
Moderator
 
Beiträge: 434
Registriert: 01.04.2007, 23:21
Wohnort: Neuss/NRW

Re: Angefangen Java zu lernen - Die ersten Startschwierigkeiten

Beitragvon Cell am 07.04.2008, 20:31

Nein, geht darum das ich Javascript mit Adobe 3D pdfs verbinde, und somit dort ne "Egoshooter" Steuerung programmiere, klappt soweit auch alles ganz gut, WASD geht, nur halt die rechnung willer mir nicht ausgeben! Und ich weiß nicht warum er das nicht macht.

Das raubt mir den letzten Nerv

Height, MouseY etc sind Variablen, bis jetz sinds knapp 180 Zeilen, die wunderbar funktionierTEN, bis ich die rechnung einbaute, aber die ist zwingend notwendig, da ich nur so, ein "richtiges" Koordinatensystem mit +X und -X Werten kriege.
Buh :p
Benutzeravatar
Cell
Mitglied
 
Beiträge: 685
Registriert: 13.08.2005, 23:50
Wohnort: Nähe Münster

Re: Angefangen Java zu lernen - Die ersten Startschwierigkeiten

Beitragvon Ingo am 07.04.2008, 20:41

Hm.
Sind denn unmittelbar vor der Berechnung von newMouseYPos die Variablen height und
event.MouseY mit vernünftigen Werten belegt (kurz vorher per Breakpoint oder alert
ausgeben lassen) ? Wenn nicht: zurückverfolgen, wo die Variablen herkommen ...
In der Syntax sehe ich jedenfalls so keinen Fehler; runde Klammern sind ok.

(Im Notfall den Code als Anhang senden - vllt. findet jemand was, wenn er den Zusammenhang sieht.)
Die beste Browserweiche ... sitzt zwischen den Ohren ;o]
Benutzeravatar
Ingo
Moderator
 
Beiträge: 434
Registriert: 01.04.2007, 23:21
Wohnort: Neuss/NRW

Nächste

Zurück zu JavaScript

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast