Kompilieren mit Package funktioniert nicht

Java:
 import inout.Console;
class fu
{
 public static void main (String args[])
 {
  int tarifzone;
  double frachtkostenanteil = 0.0;
  boolean ok = true;
  System.out.println("Geben Sie bit die Traifzone ein");
  tarifzone = Console.readInt();
  switch (tarifzone)
  {
	case 1: frachtkostenanteil =15.0; break;
	case 2: frachtkostenanteil = 25.5; break;
	case 3: frachtkostenanteil = 35.5; break;
	case 4: frachtkostenanteil = 40.0; break;
	default : ok = false;
}
   if (ok)
	System.out.println("Frachkostenanteil: "+frachtkostenanteil);
   else
	System.out.println("Keine gültige Tarifzone: "+tarifzone);
  }
}

Wieso lässt sich dieser Code nicht kompilieren?? Es wird immer folgender Text angezeigt:
Exception in thread "main" java.lang.Error: Unresolved compilation problems:
tarifzone cannot be resolved to a variable
The method ConsolereadInt() is undefined for the type fu
tarifzone cannot be resolved to a variable
tarifzone cannot be resolved to a variable

at fu.main(fu.java:11)



Das package dazu hab ich im selben Ordner abgespeichert, aber trotzdem lässt es sich nicht kompilieren:

Hier ist das Package:
Java:
package inout;
import java.util.*;
import java.util.regex.*;
import java.text.*;

public class inout
{
private static Scanner sc;

private Console()
{
}

public static String readString()
throws NoSuchElementException, IllegalStateException
{
Scanner sc = new Scanner(System.in);
return sc.nextLine();
}

public static char[] readCharArray()
throws NoSuchElementException, IllegalStateException
{
sc = new Scanner(System.in);
String text = sc.nextLine();
return text.toCharArray();
}

public static boolean readBoolean() throws
InputMismatchException, NoSuchElementException,
IllegalStateException
{
sc = new Scanner(System.in);
return sc.nextBoolean();
}

public static int readInt() throws
InputMismatchException, NoSuchElementException,
IllegalStateException
{
return new Scanner(System.in).nextInt();
}

public static long readLong() throws
InputMismatchException, NoSuchElementException,
IllegalStateException

public static char[] readCharArray()
throws NoSuchElementException, IllegalStateException
{
sc = new Scanner(System.in);
String text = sc.nextLine();
return text.toCharArray();
}

public static boolean readBoolean() throws
InputMismatchException, NoSuchElementException,
IllegalStateException
{
sc = new Scanner(System.in);
return sc.nextBoolean();
}

public static int readInt() throws
InputMismatchException, NoSuchElementException,
IllegalStateException
{
return new Scanner(System.in).nextInt();
}

public static long readLong() throws
InputMismatchException, NoSuchElementException,
IllegalStateException
IllegalStateException
{
Locale.setDefault(Locale.ENGLISH);
return new Scanner(System.in).nextDouble();
}

public static double readDoubleComma() throws
InputMismatchException, NoSuchElementException,
IllegalStateException
{
Locale.setDefault(Locale.GERMAN);
return new Scanner(System.in).nextDouble();
}

public static char readChar() throws
NoSuchElementException,IllegalStateException
{
String s = new Scanner(System.in).next();
return s.charAt(0);
}
}

Vielen Dank für eure Hilfe, hab jetzt an dem Zeug hier schon 5 h oder so rumgebastelt
 
Hi,

pack deine Klasse inout auch in einen Unterordner inout. Die Paketstruktur wird
direkt auf Ordnerstrukturen abgebildet.
 
du verwendest ja garnicht deine Klasse inout ???:L

probiers mal so:

Java:
import inout.inout;

//....
tarifzone = inout.readInt();

Exceptions schmeissen oder catchen nicht vergessen (edit: die brauchst du allerdings auch nicht 😀). und warum hast du in inout einen Konstruktor für Console??? den kannst du dir ebenfalls sparen 😉.

ps: Klassennamen sind CamelCase
 
Zuletzt bearbeitet:
und warum hast du in inout einen Konstruktor für Console?

Ups, das hab ich ja ganz übersehen ;-) Wobei ich dahin tendieren würde die
Klasse in Console umzubenennen. Dann stimmt der Code in der Klasse fu
nämlich.
 
@nrg: habs so probiert, wie du geschrieben hast, aber da kommt trotzdem die Meldung:

Exception in thread "main" java.lang.Error: Unresolved compilation problems:
tarifzone cannot be resolved to a variable
The method ConsolereadInt() is undefined for the type fu
tarifzone cannot be resolved to a variable
tarifzone cannot be resolved to a variable

at fu.main(fu.java:11)
@gman: Die klasse inout ist schon in dem unterordner(package) inout
 
Wobei ich dahin tendieren würde die
Klasse in Console umzubenennen. Dann stimmt der Code in der Klasse fu
nämlich.

würde ich weniger "hintendieren" 😉. man sollte kollisionen mit klassen aus der Java Spezifikation vermeiden. außerdem ist es allgemein keine gute idee einen fehler zu beheben, indem man den rest darauf anpasst 🙂
 
ich habe jetzt wenig lust jeden fehler aufzuzählen. soweit bist du von der lösung ja nicht entfernt, also mache ich dir das mal kompilierbar:

Java:
package inout;

import java.util.Scanner;

public class InOut {

	private static Scanner scn = new Scanner(System.in);

	public static String readString(String prompt) {
		System.out.println(prompt);
		return scn.nextLine();
	}
	
	public static int readInt(String prompt) {
		System.out.println(prompt);
		return scn.nextInt();
	}
	
	// etc.
}

Java:
import inout.InOut;

class Fu {
	
	public static void main(String args[]) {
		boolean ok = true;
		double frachtkostenanteil = 0.0;
		int tarifzone = InOut.readInt("Geben Sie bitte die Traifzone ein");
		
		switch (tarifzone) {
			case 1: frachtkostenanteil = 15.0; break;
			case 2: frachtkostenanteil = 25.5; break;
			case 3: frachtkostenanteil = 35.5; break;
			case 4: frachtkostenanteil = 40.0; break;
			default : ok = false;
		}
		
		if (ok) {
			System.out.println("Frachkostenanteil: " + frachtkostenanteil);
		} else {
			System.out.println("Keine gültige Tarifzone: " + tarifzone);
		}
	}
}

dabei muss Fu.java in dem gleichen Verzeichnis liegen wie der Ordner inout. In dem Ordnet inout ist wiederrum die Datei InOut.java
 
außerdem ist es allgemein keine gute idee einen fehler zu beheben, indem man den rest darauf anpasst

Da stimme ich dir zu, aber ich versuche immer erst eine Lösung aufzuzeigen die den Kram ans Laufen
bringt damit der Fragesteller schnell ein Erfolgserlebnis hat ;-) Den Rest kann man dann ja immer noch
ansprechen (CamelCase, Namenskollisionen, etc.).
 
@nrg: ich check nicht, wie ich bei dem Package deinen Teil einfüge??Sorry, ich hab leider keine große Ahnung vom Programmieren. kannst mir das package nochmal komplett reinschreiben? Wär super nett, danke
 
was gibt's da nicht zu checken? wenn du keine ahnung von programmierung hast, es aber für's studium brauchst, hast du entweder das falsche studium gewählt oder du solltest dir darüber im klaren werden, dass code kostet. dann machen hier einige auch mit sicherheit deine hausaufgaben... ich wollte uns jetzt in diesem fall einen 2-seitigen dialog sparen aber im normalfall wird es dir hier auch nicht soo einfach gemacht.
also sag entweder eine explizite fehlermeldung oder gönn dir etwas fachliteratur..
 
also es ist so, ich lern Java alleine voraus, weils mir in der Uni viel zu schnell/lückenhaft erklärt wird. Ich brauch dieses blöde Package, um die Programme in dem Java Buch, das ich neben 2 anderen gerade durcharbeite ausführen zu können.
Ich habs jetzt so eingefügt, aber es kommt immer noch diese Fehlermeldung:

Java:
import inout.inout;
 
class Fu {
    
    public static void main(String args[]) {
        boolean ok = true;
        double frachtkostenanteil = 0.0;
        int tarifzone = inout.readInt("Geben Sie bitte die Tarifzone ein");
        
        switch (tarifzone) {
            case 1: frachtkostenanteil = 15.0; break;
            case 2: frachtkostenanteil = 25.5; break;
            case 3: frachtkostenanteil = 35.5; break;
            case 4: frachtkostenanteil = 40.0; break;
            default : ok = false;
        }
        
        if (ok) {
            System.out.println("Frachkostenanteil: " + frachtkostenanteil);
        } else {
            System.out.println("Keine gültige Tarifzone: " + tarifzone);
        }
    }
}

hier das Package:
Java:
package inout;
 
import java.util.Scanner;
 
public class inout {
 
    private static Scanner scn = new Scanner(System.in);
 
    public static String readString(String prompt) {
        System.out.println(prompt);
        return scn.nextLine();
    }
    
    public static int readInt(String prompt) {
        System.out.println(prompt);
        return scn.nextInt();
    }public static char[] readCharArray()
    		throws NoSuchElementException, IllegalStateException
    		{
    		sc = new Scanner(System.in);
    		String text = sc.nextLine();
    		return text.toCharArray();
    		}
    		 
    		public static boolean readBoolean() throws
    		InputMismatchException, NoSuchElementException,
    		IllegalStateException
    		{
    		sc = new Scanner(System.in);
    		return sc.nextBoolean();
    		}
    		 
    		public static int readInt() throws
    		InputMismatchException, NoSuchElementException,
    		IllegalStateException
    		{
    		return new Scanner(System.in).nextInt();
    		}
    		 
    		public static long readLong() throws
    		InputMismatchException, NoSuchElementException,
    		IllegalStateException
    		 
    		public static char[] readCharArray()
    		throws NoSuchElementException, IllegalStateException
    		{
    		sc = new Scanner(System.in);
    		String text = sc.nextLine();
    		return text.toCharArray();
    		}
    		 
    		public static boolean readBoolean() throws
    		InputMismatchException, NoSuchElementException,
    		IllegalStateException
    		{
    		sc = new Scanner(System.in);
    		return sc.nextBoolean();
    		}
    		 
    		public static int readInt() throws
    		InputMismatchException, NoSuchElementException,
    		IllegalStateException
    		{
    		return new Scanner(System.in).nextInt();
    		}
    		 
    		public static long readLong() throws
    		InputMismatchException, NoSuchElementException,
    		IllegalStateException
    		IllegalStateException
    		{
    		Locale.setDefault(Locale.ENGLISH);
    		return new Scanner(System.in).nextDouble();
    		}
    		 
    		public static double readDoubleComma() throws
    		InputMismatchException, NoSuchElementException,
    		IllegalStateException
    		{
    		Locale.setDefault(Locale.GERMAN);
    		return new Scanner(System.in).nextDouble();
    		}
    		 
    		public static char readChar() throws
    		NoSuchElementException,IllegalStateException
    		{
    		String s = new Scanner(System.in).next();
    		return s.charAt(0);
    		}
    		}

des hier ist die Fehlermeldung:
Exception in thread "main" java.lang.Error: Unresolved compilation problems:
tarifzone cannot be resolved to a variable
The method ConsolereadInt() is undefined for the type fu
tarifzone cannot be resolved to a variable
tarifzone cannot be resolved to a variable

at fu.main(fu.java:11)

Tut mir leid, wenn ich euch mit meiner Frage auf den Kecks gehe, aber ohne die kann ich net weiterlernen und meine restlichen Studienkollegen, die mirs evtl. erklären könnten sind im Urlaub.
 
Ich habe mir den von Dir geposteten Code angschaut. Die von Dir gepostete Fehlermeldung passt irgendwie überhaupt nicht dazu (Fu inzwischen groß geschrieben, tarifzone ist deklariert..). Kann es sein, dass Du selbst schon ein bischen weiter gemacht hast? Falls ja, poste bitte den Code mit dazu passender Fehlermeldung.
 
da passt so einiges nicht...: z.B:
[java=67] public static long readLong() throws
InputMismatchException, NoSuchElementException,
IllegalStateException
IllegalStateException
{
Locale.setDefault(Locale.ENGLISH);
return new Scanner(System.in).nextDouble();
}[/code]

hier gibst du bspw. ein Double wieder, obwohl die Signatur der Methode ein long erwartet, einige Methoden sind doppelt usw...und die gepostete Fehlermeldung passt nicht zu dem geposteten Code!
 
die gepostete Console passt NICHT zum geposteten Code!!!

wenn du jetzt nochmal versuchst den Code auszuführen, grüner Pfeil (Ctrl+F11) erhälst du eine andere Fehlermeldung.(wenn überhaupt)

Dein im Screenshot gezeigter Code enhält keinen Compilierfehler...der sieht nämlich so aus:
zu beachten das rote Kreuz 😉
 

Anhänge

  • Unbenannt.PNG
    Unbenannt.PNG
    35,9 KB · Aufrufe: 37
Zuletzt bearbeitet:
aso ja, aber das package enthält compilerfehler. boa, wenn des eeeendlich geht, mach ich auch 3 Kreuzzeichen. Wieviel Zeit ich da jetzt schon rumgesucht hab, nur weil die des in dem Buch net richtig hingeschrieben haben, wie des geht:-(
 

Anhänge

  • package1.jpg
    package1.jpg
    91,6 KB · Aufrufe: 51
  • package2.jpg
    package2.jpg
    91,3 KB · Aufrufe: 35
  • package3.jpg
    package3.jpg
    89,8 KB · Aufrufe: 35
Das sieht so leicht danach aus, als würden da Packages nicht importiert sein.
Du kannst ja mal auf das kleine Symbol links am Rand (Die Lampe mit dem roten X zusammen) klicken und dir dann anzeigen lassen, was Eclipse meint, wie man das Problem lösen kann 😉
 
da sind ungefähr 20 rote lampen? hab da jetzt rumprobiert, mit dem was mir Eclipse sagt, aber des hilft mir alles nix weiter?? Welche von den Eclipse-Optionen soll ich denn da wählen??

Wie werden denn die Packages importiert?? indem man sie im selben Ordner hat oder??

Ich hab jetzt die fu-Datei so in dem Ordner gespeichert, wie auf dem Screenshot. Jetzt kommt ein anderer Fehler: siehe Screenshot
 

Anhänge

  • package4.jpg
    package4.jpg
    88 KB · Aufrufe: 39
  • Gespeichert.jpg
    Gespeichert.jpg
    85,6 KB · Aufrufe: 43
Sofern die Strukturierung des Codes grundsätzlich stimmt, kann Eclipse mit
Code:
STRG+SHIFT+O
die fehlenden imports ergänzen.
Allerdings scheint bei Dir schon ein Problem mit der falsch gesetzten oder fehlenden Klammern zu bestehen, da bin ich mir nicht sicher ob das automatische Setzen der imports funktioniert.

Zu den Screenshots hätte ich allerdings eine Frage:
Warum um Himmels Willen willst Du die Einlese-Methoden von Scanner nochmals in eigenen Methoden abbilden/kapseln?? ;-)
 
Du benötigst ja erstmal nur die Methode
Code:
readInt(String text)
1. Lösche die Klasse inout
2. Erzeuge einen neue Klasse z.B. ConsoleReader (Klassennamen beginnen mit einen Grossbuchstaben - und Namen die eine ungfähre Vorstellung über die Funktion der Klasse vermitteln sind auch nicht verkehrt.
3. Diese Klasse könnte wie folgt aussehen:
Java:
package inout;
import java.util.*;

public static class ConsoleReader throws NoSuchElementException, IllegalStateException {
    public static int readInt(String text) {
        System.out.println(text);
        return new Scanner(System.in).nextInt();
    }
}

Ist nicht optimal, sollte aber funktionieren
4. In der Klasse fu schmeißt Du das
Code:
import inout.inout;
ersatzlos raus und änderst die einlesende Zeile ab
Code:
int tarifzone = ConsoleReader.readInt("bla");
5. Benenne die Klasse Fu so um, dass sie den Java Code Conventions entspricht.
 
irwie funktionierts immer noch nicht? habs jetzt in die klasse Tarifzone umbenannt. Aber jetzt kommen die Fehler siehe screenshot.
 

Anhänge

  • package5.jpg
    package5.jpg
    91,9 KB · Aufrufe: 33
  • package6.jpg
    package6.jpg
    81,6 KB · Aufrufe: 37
  • package7.jpg
    package7.jpg
    86,6 KB · Aufrufe: 41
Zuletzt bearbeitet:
Lass lieber die Methoden die Exceptions werfen nicht die Klassen.
Also eine Zeile das throws nach unten verschieben.

Waren schon in deinem Buch die Exceptions dran?
 
Sorry, das throws gehört natürlich zum Methodenrumpf:
Java:
package inout;
import java.util.*;

public static class ConsoleReader {
    public static int readInt(String text) throws NoSuchElementException, IllegalStateException {
        System.out.println(text);
        return new Scanner(System.in).nextInt();
    }
}
Sehe nirgends die Klasse nirgends in Deinem Package Explorer, die sollte jetzt doch anstelle der Klasse fu stehen.
 
also langsam geht bei mir garnix mehr:-( wollt jetzt ein ganz normales programm starten und es zeigt mir wieder diesen Fehler an siehe screenshot
 

Anhänge

  • package8.jpg
    package8.jpg
    80,6 KB · Aufrufe: 36
Sieht mir langsam nach einen kaputten Eclipse aus.

Kannst du über Kommandozeile kompilieren?

Code:
javac Demoaufruf
 
@asgar: ne die Exceptions waren noch nicht dran??

@michael:aber auf dem Screenshot ist doch eine Klasse namens ConsoleReader im Package inout??

Was ist denn mit dem Fehler: editor does not contain a main type gemeint??
Das Programm DemoAufruf hat doch eine main-Funktion enthalten, ich check garnet wo das Problem liegt??
 
Zuletzt bearbeitet:
javastudent89;802097@michael:aber auf dem Screenshot ist doch eine Klasse namens ConsoleReader im Package inout??[/QUOTE hat gesagt.:
Und zwei weitere - im default und eines an einer ganz unüblichen Stelle. Wie hast Du das da hinbekommen? Schmeiß die zwei mal raus.

Ursprünglich meinte ich die Klasse Tarifzone. Bin heut wohl nicht so ganz bei der Sache...
 
also ich versteh echt nicht, was du machst. mein code (der ja von deinem nicht die welt abweicht) kompiliert doch ohne probleme.

mach doch entweder mal folgendes:
- geh in einen ordner
- erstelle eine textdatei namens Fu.java
- kopier den code (klasse Fu) vom mir rein
- erstelle einen ordner inout
- gehe in diesen ordner und erstelle eine textdatei namens InOut.java
- kopier den code (klasse InOut) von mir rein
- kompilier es mit (javac Fu.java) und führ es mit (java Fu) aus

oder:
- erstelle in eclipse ein neues project
- rechtsklick drauf und New > Package (inout)
- rechtsklick auf src > New > Class (Fu) und code reinkopieren
- rechtsklick auf inout > New > Class (InOut) und code reinkopieren
- rechtsklick auf Fu.java > run as > Java Applikation

edit: hab mir jetzt echt nichts alles durchgelesen 😀. wenn es aber grad allgemein irgendwo hackt mach es vllt einfach mal mit dem ersten weg (evtl. musst du da nur additional PATH erweitern)
 
@nrg: also ich hab deinen 2.Weg bei eclipse genauso ausgeführt, wie beschrieben(Projekt heißt "Fracht", siehe Screenshot. jetzt kam folgende Fehlermeldung:
siehe Screenshot.

hier ist der Code für das Package InOut. Stimmt der so, ich hab ihn rauskopiert von deinem, aber da zeigts mir trotzdem viele Fehler an, bei Eclipse??

Java:
package inout;
 
import java.util.Scanner;
 
public class InOut {
 
    private static Scanner scn = new Scanner(System.in);
 
    public static String readString(String prompt) {
        System.out.println(prompt);
        return scn.nextLine();
    }
    
    public static int readInt(String prompt) {
        System.out.println(prompt);
        return scn.nextInt();
    }public static char[] readCharArray()
    		throws NoSuchElementException, IllegalStateException
    		{
    		sc = new Scanner(System.in);
    		String text = sc.nextLine();
    		return text.toCharArray();
    		}
    		 
    		public static boolean readBoolean() throws
    		InputMismatchException, NoSuchElementException,
    		IllegalStateException
    		{
    		sc = new Scanner(System.in);
    		return sc.nextBoolean();
    		}
    		 
    		public static int readInt() throws
    		InputMismatchException, NoSuchElementException,
    		IllegalStateException
    		{
    		return new Scanner(System.in).nextInt();
    		}
    		 
    		public static long readLong() throws
    		InputMismatchException, NoSuchElementException,
    		IllegalStateException
    		 
    		public static char[] readCharArray()
    		throws NoSuchElementException, IllegalStateException
    		{
    		sc = new Scanner(System.in);
    		String text = sc.nextLine();
    		return text.toCharArray();
    		}
    		 
    		public static boolean readBoolean() throws
    		InputMismatchException, NoSuchElementException,
    		IllegalStateException
    		{
    		sc = new Scanner(System.in);
    		return sc.nextBoolean();
    		}
    		 
    		public static int readInt() throws
    		InputMismatchException, NoSuchElementException,
    		IllegalStateException
    		{
    		return new Scanner(System.in).nextInt();
    		}
    		 
    		public static long readLong() throws
    		InputMismatchException, NoSuchElementException,
    		IllegalStateException
    		IllegalStateException
    		{
    		Locale.setDefault(Locale.ENGLISH);
    		return new Scanner(System.in).nextDouble();
    		}
    		 
    		public static double readDoubleComma() throws
    		InputMismatchException, NoSuchElementException,
    		IllegalStateException
    		{
    		Locale.setDefault(Locale.GERMAN);
    		return new Scanner(System.in).nextDouble();
    		}
    		 
    		public static char readChar() throws
    		NoSuchElementException,IllegalStateException
    		{
    		String s = new Scanner(System.in).next();
    		return s.charAt(0);
    		}
    		}
 

Anhänge

  • fracht.jpg
    fracht.jpg
    86,7 KB · Aufrufe: 43
  • fracht2.jpg
    fracht2.jpg
    93,3 KB · Aufrufe: 41
- kopier den code (klasse InOut) von mir rein

was ist daran so schwer zu verstehen? 🙂

nimm doch ganz einfach mal nur die zwei methoden, die ich dir gepostet habe. deine enthalten halt kompilierfehler (du hast mehrmals methoden der gleichen signatur, verwendest nicht importierte klasse, sc muss scn heissen und musst du auch nicht in jeder methode neu instanziieren - letzteres ist aber kein showstopper). es ist schon komisch, dass rechts in deiner outline genau die methoden, die ich dir gepostet hatte, keinen kompilierfehler haben.
also was um himmels willen ist jetzt so schwer daran einmal strg+c und strg+v zu drücken? (tut mir leid, wenn ich es so sage aber ich verstehe einfach nicht ganz, was du da treibst)
 
Ahh jetzt weiß ich was du meinst, wir haben die ganze Zeit aneinander vorbeigeschrieben xD ich hab immer nach dem "etc." in deinem Code den Rest von dem alten Code eingefügt, sodass es sich nicht kompilieren lies. Jetzt hab ich den Rest weggelassen, aber jetzt funktioniert das Programm nicht richtig z.B. wenn man einen "richtigen Frachtkostenanteil eingibt z.B. 15.0 oder 25.5 , dann kommt folgende Fehlermeldung: siehe Screenshot
Wie schaff ich des jetzt noch, dass es ganz funktioniert??
 

Anhänge

  • kompilierbar.jpg
    kompilierbar.jpg
    92,5 KB · Aufrufe: 41
du hast den code selbst geschrieben und verstehst ihn nicht? 😀

probiers doch mal mit einer ganzzahl von 1-4...
 
der code ist aus dem buch java: Der einstieg in die programmierung
ja mit ner ganzzahl lässt sich der code schon kompilieren, aber die normalen switch Anweisungen lassen sich nicht anzeigen.
 

Neue Themen


Zurück
Oben