BlueJ - illegal start of expression. Wo liegt der Fehler?

Hallöchen, wir habe in der Schule vor kurzem mit dem Programmieren angefangen und dazu benutzen wir "BlueJ" und die Klassenbibliothek "Stifte und Mäuse".

Nun habe ich allerdings ein Problem und weiß nicht mehr weiter: In der Klasse Polygon bekomme ich in der Zeile mit "public void zeichne()" eine Fehlermeldung und zwar "illegal start of expression".

import sum.kern.*;

public class Polygon
{
    // Referenzen
    Stift meinStift;
    Polygon meinPolygon;
    Polygon meinPolygon1,meinPolygon2;

    // Konstruktor
    public Polygon(int pN,int pLaenge,int pHPosition,int pVPosition,int pWinkel)
    {
        // Objekte
        meinStift = new Stift();
        this.zeichne(pN, pLaenge, pHPosition, pVPosition, pWinkel);

        // Methoden
        public void zeichne() 

        meinStift.bewegeBis(pHPosition,pVPosition);
        meinStift.dreheUm(pWinkel);
        meinStift.runter();
        meinStift.bewegeUm(pLaenge);
        meinStift.dreheUm(-120);
        meinStift.bewegeUm(pLaenge);
        meinStift.dreheUm(-120);
        meinStift.bewegeUm(pLaenge);

        meinStift.bewegeBis(pHPosition,pVPosition);
        meinStift.dreheUm(pWinkel);
        meinStift.runter();
        meinStift.bewegeUm(pLaenge);
        meinStift.dreheUm(-120);
        meinStift.bewegeUm(pLaenge);
        meinStift.dreheUm(-120);
        meinStift.bewegeUm(pLaenge);
    }
}

Und die oben genannte Klasse Polygon soll auf die Klasse Steuerung "basieren". Liegt vielleicht hier der Fehler?

import sum.kern.*;

public class Steuerung
{
    // Referenzen
    Bildschirm meinBildschirm;

    // Konstruktor
    public Steuerung()
    {
        // Instanzvariable initialisieren
        meinBildschirm = new Bildschirm(800, 800);

        //methoden

        meinStift.bewegeBis(pHPosition,pVPosition);
        meinStift.dreheUm(pWinkel);
        meinStift.runter();
        meinStift.bewegeUm(pLaenge);
        meinStift.dreheUm(-120);
        meinStift.bewegeUm(pLaenge);
        meinStift.dreheUm(-120);
        meinStift.bewegeUm(pLaenge);

        meinStift.bewegeBis(pHPosition,pVPosition);
        meinStift.dreheUm(pWinkel);
        meinStift.runter();
        meinStift.bewegeUm(pLaenge);
        meinStift.dreheUm(-120);
        meinStift.bewegeUm(pLaenge);
        meinStift.dreheUm(-120);
        meinStift.bewegeUm(pLaenge);
    }
}

Ich würde mich sehr freuen, wenn mir jemand helfen würde.

...zur Frage

Was soll der Code bewirken?

// Methoden
public void zeichne()

Soll die Methode zeichne hier aufgerufen oder definiert werden? Entscheide dich für eins und halte dich an die entsprechende Syntax.

Falls du sie definieren / implementieren willst, musst du das außerhalb des Konstruktors tun.

...zur Antwort

Du hast "result" nicht initialisiert. Deshalb wird der Standardwert von "0" vergeben. Die Probleme, die die Division durch 0 mit sich bringt, sind dir vermutlich bekannt.

Ich würde dir empfehlen, es mittels Rekursion zu lösen:

public static double calculate(int n) {
   if (n == 0)
return 1; return 1f + 1f / calculate(n - 1); }

Falls du die Lösung per Iteration bevorzugst, musst du "result" einfach nur mit "1" initialisieren und es sollte funktionieren.

...zur Antwort

Deine "halbvollständigen Codezeilen" sind bescheiden lesbar und es bedarf einer Formatierung. Danach ist es ganz gut.

Du hast natürlich den wichtigsten Teil deines Codes weggelassen - die Klasse, die die Liste darstellt. Ich habe deswegen keine Ahnung und habe meine "eigene Version" davon programmiert. Es sollte allerdings mehr oder weniger ähnlich sein. Also erstmal das Gerüst:

public class MyList<T>
{
private class Node<T>
{
public T Data { get; private set; }
public Node<T> Next { get; set; }
public Node(T element)
{
Data = element;
}
}
public int Length { get; private set; }
private Node<T> Head { get; set; }
}

Wir haben also eine Liste aus Knoten, die jeweils gewisse Daten beinhalten und einen Nachfolger haben. Eine Liste besteht im Moment aus einem Anfangselement und der Gesamtlänge.

Falls du jetzt ein Element aus dieser Liste entfernen willst, was musst du dafür tun? Du durchsuchst jedes Element der Liste und falls du das entsprechende gefunden hast, musst du den Nachfolger an der Vorläufer anhängen. Ein paar Spezialfällge müssen dabei berücksichtigt werden, z.B. wenn sofort das erste Element das gesuchte ist.

public void Remove(T element)
{
Node<T> current, prev = null;
current = Head;
while (current != null)
{
if (current.Data.Equals(element))
{
if (current == Head)
Head = current.Next;
else
prev.Next = current.Next;
Length--;
return;
}
else
{
prev = current;
current = current.Next;
}
}
}

Der "Trick" ist, dass der Vorgänger immer mitgespeichert wird. So kannst du das vorherige Element mit dem Nachfolger des aktuellen verknüpfen und somit das aktuelle Element löschen. Für die Freigabe des Speichers ist dann der Garbage Collector verantwortlich.

...zur Antwort

Dein Code ergibt überhaupt keinen Sinn. Falls der Java-Compiler nicht schon selbst einen Fehler wirft, hast du dir erstmal eine schöne Endlosschleife gebaut, die irgendwann wegen zu wenig Speicher beendet wird. Du rust im Konstruktor deiner Klasse Karte den gleichen Konstruktor nochmal auf.

Außerdem scheinst du die Grundlagen der objektorientierten Programmierung nicht verstanden zu haben. Du hast 1 Karte. Welche Eigenschaften besitzt diese? Meist eine Farbe (Herz, Karo,...) und eine Augenzahl (10, J, D, K, A).

Ein Stapel besteht dann aus mehreren Karten. Dafür kannst du ein Array oder eine Liste verwenden. Der Code sollte dann in etwa so aussehen:

public class Card {
private int _value;
private char _suit;
public Card(char suit, int value) {
_suit = suit;
_value = value;
}
}
public class Deck {
private List<Card> _cards;
public Deck() {
for(int i = 0; i < 4; i++)
for(int j = 1; j <= 14; j++)
_cards.add(new Card((char)i, j));
}
public void shuffle() {
//TODO: implement this
}
}

Für die Farbe würde ich ein Enum verwenden (habe ich in meinen Beispiel nicht gemacht). Und natürlich müsstest du die Werte größer 10 in die entsprechenden Buchstaben umwandeln oder ein anderes System einfallen lassen, damit keine ungültigen Karten hinzugefügt werden können.

Das gilt natürlich nur, wenn wir von einem normalen Kartendeck ausgehen. Wenn ich mir die Frage so durchlese, scheint das allerdings nicht der Fall zu sein...

...zur Antwort

Der Messenger soll entweder über das Internet laufen oder ein Programm

Daran merkt man sofort, dass du keine Ahnung von Netzwerkprogrammierung bzw. den Grundlagen der Netzwerktechnik hast.

Du denkst, dass du C++ kannst? Ich sage, dass du es nicht kannst (zumindest laut meiner Definition). C++ bringt wie alle Programmiersprachen gewisse Bibliotheken mit, welche Funktionen bereitstellen. In deinem Fall gibt es garantiert Bibliotheken, die Klassen für (TCP)Sockets, In- und OutputStreams, DataPakets u.ä. zur Verfügung stellen, welches dir in deinem Projekt helfen kann.

Eine Programmiersprache zu beherrschen, heißt m.M.n. auch eben diese Bibliotheken im groben zu kennen. Zu einer Sprache gehört mehr, als die Syntax und die grundlegenden Kontrollstrukturen (If-Then-Else, Switch, Loops, etc).

Mal von dieser Sache abgesehen, empfehle ich dir nicht, eine neue Sprache anzufangen. Du wirst dich für dieses Thema einlesen müssen (z.B. TCP/IP-Stack). Diese Arbeit wird nur schwieriger, wenn du zusätzlich noch die Sprache wechselst und du am Anfang nicht mal weißt, wie man eine einfache Konsolenausgabe macht.

Falls du dich doch für eine andere Sprache entscheiden willst, kannst du dir eigentlich jede aussuchen. Es gibt für alle (z.B. Java, C++, C#, Python, Ruby, Haskell, JavaScript) irgendwelche Bibliotheken (3rd-Party oder Built-In), die Netzwerkfunktionalität zur Verfügung stellen.

Just my 2 cents...

...zur Antwort

Du solltest lernen bzw. dir angewöhnen die Dokumentation von Java zu befragen. Die Klasse ArrayList besitzt bereits alle Methoden, die du für die Aufgaben brauchst. Ich weiß, dass man besonders am Anfang von der Anzahl der Klassen und Funktionen überwältigt sein kann, aber du solltest, wie bereits geschrieben, die die Doku zu den Klassen in der Aufgabenstellung durchlesen, um zu sehen, was du brauchen könntest.

Wie gesagt, nicht besonders schwer, wenn man die vorhandenen Methoden kennt:

public class Notebook {
private List<String> _entries;
public Notebook() {
_entries = new ArrayList<String>();
}
public int getEntryCount() {
return _entries.size();
}
public void addEntry(String entry) {
_entries.add(entry);
}
public void addEntryAtPosition(String entry, int pos) {
_entries.add(pos, entry);
}
}

Ich könnte mir vorstellen, dass ihr in einem der nächsten Schritte die Klasse String mit einer selbst definierten Klasse austauscht, die dann einen Eintrag darstellt.

Link zur Doku: http://docs.oracle.com/javase/8/docs/api/index.html

...zur Antwort

Ich hab überall in Google gesucht aber ich finde nix

Das ist schlicht und einfach gelogen. "java instanceof" gibt ca. 18 Millionen Suchergebnisse zurück. Meine Definition des Wortes "nix" ist irgendwie anders.

Deine Fragen lassen ganz klar durchblicken, dass du weder von Java noch Bukkit (programmatisch) etwas verstehst. Diese Fragen sich Anfängerfragen bzw. grundlegende Sachen, die in jedem zweitklassigen Youtube-Tutorial behandelt werden. Such also mit einer Suchmaschine deiner Wahl nach "java tutorial" (es wird sogar etwas gefunden) ein und nimm dir ein oder zwei vor.

Ansonsten sollte in dem Tutorial noch Klassen, Instanzen, Interfaces, Listener Pattern, Enums sowie Ploymorphismus behandelt werden. Das brauchst du, um die Bukkit-API (besser) zu verstehen.

...zur Antwort
C# : Zeilen auslesen und in Textdatei schreiben

Mein Programm funktioniert nicht...ich habe 4 Textdateien, die jeweils etwa 300 Zeilen mit nur einer kurzen Info je Zeile (Zb. Name), wobei Zeile 1 aus jeder Datei im Zusammenhang steht.

Nun brauche ich eine weitere Textdatei, die Zeile 1 aus Datei 1,2,3 und 4 nimmst und in einen kleinen Abschnitt schreibt. Dann Zeile 2 aus Datei 1,2,3 und 4 und einen weiteren Abschnitt mit den Infos

Mein Code bisher (C#, Windows Forms):

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.IO;

using System.Text;

using System.Threading;

using System.Linq;

using System.Windows.Forms;

namespace WindowsFormsApplication1

{

public partial class Programm4 : Form
{
    public Programm4()
    {
        InitializeComponent();
    }
    private void button1_Click(object sender, EventArgs e)
    {
        string pathOU = textBox1.Text;
        string pathCN = textBox2.Text;
        string pathVorname = textBox3.Text;
        string pathNachname = textBox4.Text;
        string pathNeu = textBox5.Text;
        string[] OUs = File.ReadAllLines(pathOU);
        string[] CNs = File.ReadAllLines(pathCN);
        string[] Vornamen = File.ReadAllLines(pathVorname);
        string[] Nachnamen = File.ReadAllLines(pathNachname);
        string[] FertigeDatensätze;

        for (int i = 0; i < OUs.Count(); i++)
        {
            FertigeDatensätze[i] = "dn: cm=" + CNs[i] + ",ou=" + OUs[i] + ",ou=Extern,o=CLAAS\nobjectClass: Top\nobjectClass: claasUserExtension\nobjectClass: Person\nobjectClass: inetOrgPerson\nobjectClass: organizationalPerson\nobjectClass: ndsLoginProperties\nclaasUserType: extern\nmail: " + CNs[i] + "\ngivenName: " + Vornamen[i] + "\nfullName: " + Vornamen[i] + " " + Nachnamen[i] + "\nsn: " + Nachnamen[i] + "\nclaasApplRoleNames: cn=CDEX_EXTERN,ou=CDEX,ou=EBApps,o=CLAAS\nPassword: \n\n";
        }
        File.WriteAllText(pathNeu, FertigeDatensätze);
    }
}

}

...zur Frage

Als erstes ist die Definition der Methode "File.WriteAllText()" wie folgt:

public static void WriteAllText(
	string path,
	string contents
)

Du übergibst der Methode einen String und ein String-Array. Daher kommt dein Fehler.

Ein einfache Möglichkeit aus dem String-Array eine String zu machen, wäre folgende Funktion:

var datensatz = string.Join(" ", FertigeDatensätze);

Damit werden die einzelnen Strings mit einem Leerzeichen getrennt in die String-Variable geschrieben.

Strings sind unveränderbar (immutable). Das heißt, wenn du Strings mit "+" zusammenfügst, wird immer ein neuer String erzeugt. Bei der Codezeile

FertigeDatensätze[i] = "dn: cm=" + CNs[i] + ",ou=" + OUs[i] + ",ou=Extern,o=CLAAS\nobjectClass: Top\nobjectClass: claasUserExtension\nobjectClass: Person\nobjectClass: inetOrgPerson\nobjectClass: organizationalPerson\nobjectClass: ndsLoginProperties\nclaasUserType: extern\nmail: " + CNs[i] + "\ngivenName: " + Vornamen[i] + "\nfullName: " + Vornamen[i] + " " + Nachnamen[i] + "\nsn: " + Nachnamen[i] + "\nclaasApplRoleNames: cn=CDEX_EXTERN,ou=CDEX,ou=EBApps,o=CLAAS\nPassword: \n\n";

wird das 13 Mal (multipliziert mit der Länge des Arrays) durchgeführt. Das verringert die Performance des Programms. Du solltest die Klasse "StringBuilder" bzw. die Methode "string.Format()" verwenden.

...zur Antwort
Weitere Inhalte können nur Nutzer sehen, die bei uns eingeloggt sind.