Problem "Vector".

Neik05

Grünschnabel
Hi, ich habe eigentlich nicht nur ein Problem, sondern zwei.

Erstes Problem. Zuerst mal hier mein Code:

Code:
import java.io.*;
import java.util.*;

public class WerteAuslesen {

	static Vector Werte = new Vector();
	
	public void WerteAuslesen() {
	// public static void main(String[] args) {
		
		LineNumberReader datei;
		String zeile;
		
		try {
			datei = new LineNumberReader( new FileReader( "Werte.txt") );
			
			while( ( zeile = datei.readLine() ) != null ) {
				
				String[] text = zeile.split( "," );
				
				for( int i = 0; i < text.length; i++ ) {
					int Wert = Integer.parseInt( text[i] );
					Werte.add( new Integer( Wert ) );
				}
			}
		} catch( IOException e ) {
			System.out.println( "Fehler beim Lesen der Datei.");
		}
	}
}

Wenn ich diesen Code starte, bekomme ich von Eclipse eine Fehlermeldung und zwar diesen hier: "Fatal exception ocurred. Program will exit.", sowie diesen: "java.lang.NoSuchMethodError: main, Exception in thread "main"".

Mir ist klar, dass das daran liegt, weil ich anstatt "public static void main(String[] args) {" "public void WerteAuslesen() {" benutze. Aber wieso ist das so. Ich möchte dies nicht in der Main - Funktion haben. jGRASP meckert hierbei nicht. Ach, und bei der Zeile "Werte.add( new Integer( Wert ) );" gibt Eclipse diese Meldung: "Type safety: The method add(Object) belongs to the raw type Vector..." Was kann das bedeuten?

-> "static Vector Werte = new Vector();": Habe ich aus dem Grund gemacht, weil ich das in einer anderen Klasse benutzen möchte. Siehe dazu zweites Problem.

Zweites Problem. Auch hierzu der Code:

Code:
import java.io.*;
import java.util.*;

public class MitDenWertenWeiterRechnen {

	int[] array = new int[WerteAuslesen.Werte.size()];
	
	for( int i = 0; i < WerteAuslesen.Werte.size(); i++ ) {
		array[i] = WerteAuslesen.Werte[i];
	}
 
...
}

Hier möchte ich mit den vorhin eingelesenen Werte weiterrechnen. Ich würde mich sehr freuen, wenn mir jemand behilflich sein kann.
 
Hallo!

Wie in jeder anderen Programmiersprache auch braucht man in Java irgendwo in der Anwendung einen EInspruchspunkt mit dem die Ausführung beginnt... das ist unter Java eben die Methode mit der Signatur:
public static void main(String[] args).

Gruss Tom
 
Code:
import java.io.*;
import java.util.*;

public class WerteAuslesen {

	static Vector Werte = new Vector();
	
	public void WerteAuslesen() {

Eine Methode wie den Konstruktor zu nennen ist eher unglücklich.


>Ach, und bei der Zeile "Werte.add( new Integer( Wert ) );" gibt Eclipse diese Meldung: "Type safety: The method add(Object) belongs to the raw type Vector..." Was kann das bedeuten?

Sagt mir nix, mein Eclipse mit JDK 1.4.2 meckert nicht.

-> "static Vector Werte = new Vector();": Habe ich aus dem Grund gemacht, weil ich das in einer anderen Klasse benutzen möchte. Siehe dazu zweites Problem.

Aua aua. Gewöhn Dir bitte an, entsprechende getter und setter zu implementieren und weg zu kommen von static und public bei Variablen.

>Zweites Problem.
>Hier möchte ich mit den vorhin eingelesenen Werte weiterrechnen. Ich würde mich sehr freuen, wenn mir jemand behilflich sein kann.

Ich sehe kein Problem. Leg doch einfach die for-Schleife in eine eigene Methode.
 
Hi, kann mir bitte einer vielleicht sagen, wieso diese Methode nicht funktioniert und was ich ändern muss. Als Fehlermeldung bekomme ich "Incompatible Types", was aber nicht sein kann, oder?

Code:
public Vector getMesswerte( int position ) {
		return Messwerte.elementAt( position );
	}
 
Habe es mal mit "int" versucht und das klappt auch nicht. Was muss da jetzt genau rein? Möchte das so machen, dass ich von einer anderen Klasse diese Funktion aufrufe und er gibt mir dann den Wert zurück, den ich an bestimmter Position will. Hmm?
 
Code:
public int getMesswert( int position ) {
		return ((Integer)Messwerte.elementAt(position)).intValue();
}

elementAt liefert ein Object zurück. Da du Integers in den Vector gestopft hast, mußt du beim Auslesen wieder auf Integer casten. Um den simplen Datentyp int zu erhalten, gibts dann die Methode intValue.
 
Zuletzt bearbeitet:
Original von Neik05
Ach, und bei der Zeile "Werte.add( new Integer( Wert ) );" gibt Eclipse diese Meldung: "Type safety: The method add(Object) belongs to the raw type Vector..." Was kann das bedeuten?
Offensichtlich nutzt Du jre 1.5.x bzw jdk1.5.x, also "Java5".
Die Erweiterungen von Java5 beinhalten unter anderem generics , wozu auch der Vector zählt. Es dürfte aber kein Fehler sein, sondern lediglich ein Hinweis von Eclipse. Es wird Dir einfach empfohlen, den generischen Datentyp Vector mit einem Parameter zu versehen.
Beispiel:
Code:
Vector <Vector> vData = new Vector <Vector> ();
Damit gibst Du an, dass der Vector nur Vectors aufnehmen soll. Versuchst Du, einen anderen Datentyp in diesem Vector aufzunehmen, wird sich der Compiler bereits beschweren.


Vorteile:
  • Vorüberlegungen nötig
  • Quellcode wird verständlicher
  • fehleranfällige Cast-Operationen zur Laufzeit entfallen

MfG
 
Zurück