Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
hey leute.. ich hoffe ihr könnt mir helfen! ich steig da einfach noch nicht duch....
also mein code ist :
public class Hamster {
public static void main(String[] args) {
Hamster h1;
h1= new Hamster();
IO.readInt(h1.nimm);
IO.readInt(h1.nimm);
Hamster h2 = new Hamster();
IO.readInt(h2.nimm);
int anz = h1.getAnzKoerner();
IO.println("Körner im Maul:" + anz);
}
}
soweit sogut.. nun aber wenn ich es ausführen will in der konsole zeigt der mir ständig error....
also brauch ich dafür die IO.class ...
aber wie importier ich die ?? ....HILFE.....
Die Klasse muss beim kompilieren und ausführen im classpath liegen.
Falls du das in eclipse probierst, füg die Klasse in den buildpath ein. Falls du das auf der Konsole machst, dann gib die Klasse im
erstmal ist überhaupt wichtig das du die passende klasse IO überhaupt hast ...
in der regel wird dieser name für anfänger-helper-klassen verwendet ... genutzt von buch-autoren, tutoren, dozenten, lehrern die den schülern zwar eine möglichkeit geben wollen mit der console zu arbeiten ... diese aber nicht von anfang an die klasse java.util.Scanner nutzen lassen die in den meisten fällen durch solche static-calls gekapselt wird ...
die meinungen über sowas gehen auseinander ...
einige denken sich : naja ... einem anfänger erstmal beibringen "mach es so" und nicht zu erklären was da abgeht um nicht auf ein mal zu viel infos zu geben kann helfen
andere entgegnen : man sollte es lieber gleich richtig lernen (diese meinung vertrete auch ich)
wie andere sagen ganz erstaunt : wenn man es als art "framework" sieht kann man es sogar als fortgeschrittener nutzen ... wo sich dann sogar einige der erst-genannten melden und meinen das man es in diesem stadium "richtig" können sollte ...
was ich mit ausdrücken will : es ist zwar eher sub-optimal gleich mit sowas anzufangen ... aber es kann durch aus ... ich sage mal lieber "leichter" für einen anfänger sein da man sich so nicht mit weiteren dingen beschäftigen muss die mit der bloßen ein-/aus-gabe zwar was zu tun haben ... aber noch etwas zu viel des guten sind ... und meist erst stoff für die darauf folgenden lern-sektionen sind
aber back to topic
wenn du die klasse IO hast musst du erstmal wissen ob diese ein sog. PACKAGE hat ... denn davon ist der CLASSPATH und die art und weise abhängig wie du sie aufrufen musst
deinem code kann man entnehmen das die klasse IO scheinbar kein package hat ... dann müssen folgende bedingung erfüllt sein
1) die klasse IO liegt direkt in einem verzeichnis von CLASSPATH
2) die klasse IO liegt direkt neben der zu compilenden klasse (bei packages muss dieses übereinstimmen !)
3) der classpath zur klasse IO wird der VM als parameter "-cp PFAD" mitgegeben
natürlich ist nur eine dieser drei bedingungen wichtig ... trifft also mindestens eine zu sollte es in der regel keine probleme geben (außer direkte konflikte ... aber um diese zu vermeiden nutzt man immer nur eine der möglichkeiten)
wenn du nun probleme hast diese möglichkeiten umzusetzen gehen wir diese doch einfach mal durch
1) system-variable CLASSPATH
in der regel wird diese variable system-weit (oder unter unix zumindest session-weit) gesetzt so das diese beim öffnen eines terminals bereit steht ...
wie das geht kann man der FAQ sowie google und der jeweiligen OS-spec entnehmen
in der regel legt man den CLASSPATH auf ein für das compilen und die ausführung notwendigen daten-pfad ... dieser kann sich bei einem entwickler über mehrere system-weite verzeichnisse erstrecken ... oder ganz simpel nur einen ordner in user.home zu einem "lib"-dir delegieren ...
grundsätzlich sollte man jedoch als ersten parameter das aktuelle verzeichnis angeben ... dies geschiet mit einem einfach punkt "." gefolgt vom trenner ... unter windows das semikolon ";" , unter unix einen doppelpunkt ":"
damit stellt man sicher das wenn man über das terminal oder scripte compiled diese erstmal das aktuelle verzeichnis als CLASSPATH nutzen und dann in diesem und davon relativ die aufgelösten package-pfade nach den im source verwendeten klassen auch richtig findet ... oder halt beim ausführen ...
eine ausnahme stellt das JDK/JRE verzeichnis und die darin liegenden daten selbst dar ... denn dies ist immer automatisch geladen denn java ist so clever und weis wo es installiert ist und wo seine daten liegen
2) klassen relativ zum package-pfad
nehmen wir an deine klasse Hamster liegt in "C:\java" ... also "C:\java\Hamster.java" ... und du bist mit dem terminal in diesem verzeichnis ... also der prompt zeigt "C:\java>" ... und du verwendest die klasse IO ... dann muss, damit das hinhaut, die datei IO.java (als source) bzw IO.class (als bytecode) auch genau in C:\java liegen ...
den rest kann die VM dann alleine ...
mit packages möchte ich dich jetzt hier nicht nerven
3) cli-parameter
java und alle tools innerhalb des JDK/JRE besitzen den gemeinsamen parameter "-classpath PFAD" bzw die kurze variante "-cp PFAD" ...
damit kann über terminal / script beim starten ganz genau der zu verwendene system-classpath angegeben werden ... dieser überschreibt dann auch die system-variable CLASSPATH
normalerweise nutzt man diese variante nur über scripte / loader ... oder wenn man damit bewusst andere daten laden will (z.b. durch manuelle angabe einer lib)
sollten weder 1) noch 2) bei dir zutreffen kannst du so den pfad zur IO-klasse angeben
wenn IO.class z.b. in C:\lib liegen würde ... dann würde der call so aussehen
auch hier gilt wieder das man das aktuelle verzeichnis über den punkt "." einbinden sollte / muss
aber davon abgesehen ist dein code an sich fehlerhaft ... ich hab ihn mal formatiert und in java-tags gesetzt ... (der große rote hinweis !)
Java:
public class Hamster
{
public static void main(String[] args)
{
Hamster h1;
h1=new Hamster();
IO.readInt(h1.nimm);
IO.readInt(h1.nimm);
Hamster h2=new Hamster();
IO.readInt(h2.nimm);
int anz = h1.getAnzKoerner();
IO.println("Körner im Maul:" + anz);
}
}
was fällt dem geübten auge sofort auf
1) java ist call-by-value ... IO.readInt(irgendeinWert); würde also keinen sinn ergeben (außer byte-array) ... viel eher würde ich vermuten das IO.readInt(); einen int zurück liefert ... also wenn überhaupt dann sowas : [c]h1.nimm=IO.readInt();[/c] oder ähnlich
2) die klasse Hamster deklariert keine variable "nimm"
3) die klasse Hamster deklariert keine methode "int getAnzKoerner();"
deine klasse ist also komplett unvollständig und auch logisch falsch
selbst wenn deine klasse Hamster eine variable "nimm" deklarieren würde (vermutlich type : int) dann würde es nichts bringen wenn du diesen wert an readInt() übergibst ... und ich glaube auch nicht das IO.readInt() überhaupt einen parameter erwartet
und weiter willst du irgendwo in der klasse Hamster die methode getAnzKoerner mit return "int" callen ... die es aber nirgends gibt ...
auch fehlt ein zähler der die körner zählt sowie eine methode zum incrementieren (was wohl "nimm" sein sollte)
bevor du dich also darum kümmerst wie du eine (in meinen augen eigentlich unnötige) helper-klasse in deiner verwendest solltest du erstmal soweit die grundlagen lernen um überhaupt compilebare klassen zu schreiben ...