# Klassen und zugriffs Problem "Help wanted"!



## foxcomp (2. Feb 2007)

Hi an alle

folgendes Problem:
Ich habe drei Klassen, diese bekommen einen String Übergeben und sollen die Anzahl der Buchstaben an eine Methode einer vierten Klasse übergeben und diese dann auch wieder auslesen können.

Ich brauche nämlich die Größte zahl damit ich alle anderen Klassen damit abgleichen kann.

Ich habe gedacht dass ich eine Globale Variable anlege, doch dann habe ich in einigen Foren erfahren dass es in java keine Globalen Variablen gibt.


Hat einer ne Idee?

Z.B.



class einz{

  //Bekommt einen String und ermittelt die anzahl der Buchstaben z.B. 4

   //jetzt an die "classe vier " übergeben

}

class zwei{

  //Bekommt einen String und ermittelt die anzahl der Buchstaben z.B. 1

  //jetzt an die "classe vier " übergeben

}

class drei{

  //Bekommt einen String und ermittelt die anzahl der Buchstaben z.B. 5

  //jetzt an die "classe vier " übergeben

}



class vier{

 int anzahl

  void methode(int anzahl){

    if(anzahl>this.anzahl){
      this.anzahl = anzahl;
    }


 }



}


----------



## SlaterB (2. Feb 2007)

was soll denn das "Help wanted" im Titel?
da sollte man eigentlich gar nicht erst antworten..

alle Klassen (oder Objekte?) müssen auf das gleiche Objekt der vierten Klasse zugreifen,
dann gibts keine Probleme

wenn es nicht möglich ist am Anfang ein gemeinsames Objekt zu erstellen und zu verteilen,
dann musst du mit static arbeiten,

static Operationen oder ein static Objekt


----------



## foxcomp (2. Feb 2007)

Ja dann frag ich mich warum du überhaupt geantwortet hast??? :?: 

Mann  mann, 

solche teilnehmer sind mir die liebsten sie haben genug zeit um sich über eine Frage aufzuregen aber keine zeit um mal einen vernünftigen Lösungsansatz zu liefern.

Dieses Forum heißt Anfängerforum dann gib auch eine Antwort noch besser eine Lösung für das Problem oder halte dich raus. 

Ganz einfach.

Deine Antwort hilft mir überhaupt nicht weiter.


----------



## Marco13 (2. Feb 2007)

Ich hab ne Idee: Ihr motzt euch jetzt so lange gegenseitig an, bis der Thread geschlossen wird    Das wird bestimmt toll. 


```
class einz{
    public vier dieVier;
    void doit(String s)
    {
        dieVier.methode(s.length();
    }
}
....
// (Der rest so wie bei dir)

void foo()
{
    vier dieVier = new vier();
    eins dieEins = new eins();
    dieEins.dieVier = dieVier;
    ...
    // genauso bei 2 und 3
    
    eins.doit("Hallo");
}
```

Websuche nach
- Wie man richtig Fragen stellt
- Java Naming Conventions

Die Struktur sieht ziemlich sinnlos aus. Falls du mehr Tipps willst, weißt du, was du zu tun hast.


----------



## DocRandom (2. Feb 2007)

..also den SlaterDB zu vergraulen, ist keine gute Idee!
Immerhin hilft er sehr vielen mit gutem Rat und schönen Beispielen.

Sein Ansatz das Du Dich mit statischen Objecten/ Operatoren auseinandersetzen solltest kommt nicht von ungefähr!

Da ich selber kein Freund von statischen Operatoren/Objecten bin, habe ich Dir mal ein kleines Beispiel geschrieben:

Zuerst die Kontrollklasse, auf die dann alle anderen Objecte zugreifen:

```
package foxcomp;

public class GroessteZahl {

	private int zahl;
	
	public GroessteZahl() {
		zahl = 0;
	}
	public void pruefeLaenge( int wortlaenge) {
		if (zahl < wortlaenge) {
			zahl = wortlaenge;
		}
	}
	public int getZahl() {
		return zahl;
	}
}
```
Nun die Klasse, die auf die Kontrollklasse zugreift:

```
package foxcomp;

public class WordCount {

	private GroessteZahl gz;
	private int anzahl;
	
	/*
	 * Dem Constructor muß eine Referenz auf die Kontrollklasse
	 * übergeben werden!
	 */
	public WordCount( GroessteZahl gz) {
		anzahl = 0;
		this.gz = gz;
	}
	public void setText(String text) {
		anzahl = text.length();
		gz.pruefeLaenge(anzahl);
	}
	public int getAnzahlZeichen() {
		return anzahl;
	}
}
```
..und zum Schluß unser Testprogramm:

```
package foxcomp;

public class Main {

	public static void main(String[] args) {
		
		/*
		 * Zuerst müssen wir die Kontrolklasse 'GroessteZahl instanzieren,
		 * da wir sie Refernz darauf an die anderen Objecte übergeben
		 */
		GroessteZahl gz = new GroessteZahl();
		/*
		 * Jetzt erzeugen wir die anderen Objecte und übergeben wie im
		 * Constructor definiert die Refernz auf die Klasse GroessteZahl mit
		 */
		WordCount eins = new WordCount(gz);
		WordCount zwei = new WordCount(gz);
		WordCount drei = new WordCount(gz);
		WordCount vier = new WordCount(gz);
		/*
		 *  Jetzt übergeben wir den Einzelnen Objekten Strings
		 *  und an der Console zur Kontrolle die Buchstabenlänge
		 */
		eins.setText("Test");
		System.out.println("Objekt eins hat eine Textlänge von: " + eins.getAnzahlZeichen() + " Zeichen");
		zwei.setText("Testprogramm");
		System.out.println("Objekt zwei hat eine Textlänge von: " + zwei.getAnzahlZeichen() + " Zeichen");
		drei.setText("EinultrakurzerText");
		System.out.println("Objekt drei hat eine Textlänge von: " + drei.getAnzahlZeichen() + " Zeichen");
		vier.setText("ganzkurz");
		System.out.println("Objekt vier hat eine Textlänge von: " + vier.getAnzahlZeichen() + " Zeichen");
		/*
		 * jetzt gucken wir nach was in unserer Kontrollklasse steht
		 */
		System.out.println("\nDie größte Wortlänge beträgt :" + gz.getZahl() + " Zeichen");
	}

}
```
Ich hoffe damit sind Deine Fragen jetzt beantwortet!

mfg
DocRandom


----------



## Marco13 (2. Feb 2007)

Das ist (unabhängig von der (noch offenen) Frage nach dem SINN des ganzen) natürlich _schöner_ als der Hack von mir   Aber irgendwie widerstrebte es mir, mich dafür jetzt sooo mächtig ins Zeug zu legen :roll: (Du weißt schon ...: Die Sache mit dem Wald, und dem (akustischen) output==input....)


----------



## DocRandom (2. Feb 2007)

..ach in eclipse schreibt sich das fast von alleine! *fg*.
Aber ist schon klar das die Waldgeschichte noch nicht gegessen ist!

lg
DocRandom


----------



## moormaster (2. Feb 2007)

Marco13 hat gesagt.:
			
		

> Das ist (unabhängig von der (noch offenen) Frage nach dem SINN des ganzen) natürlich _schöner_ als der Hack von mir   Aber irgendwie widerstrebte es mir, mich dafür jetzt sooo mächtig ins Zeug zu legen :roll: (Du weißt schon ...: Die Sache mit dem Wald, und dem (akustischen) output==input....)



output == input kann nie true werden, da es sich vermutlich nicht um primitive Datentypen handelt und daher nur Objektreferenzen verglichen werden... Ich kenne kein InputStream, was gleichzeitig OutputStream ist... ^^


----------



## foxcomp (2. Feb 2007)

Danke euch beiden.
den Code muss ich noch auf mein Problem ausprobieren aber ein test hat Gezeit das es Klappt.

Echt Super :lol: :toll: 

Tut mir leid aber das hätte er ja auch gleich Schreiben können dann wäre die Sache Ohne pi pa po erledigt.

Noch mal danke.

Jungs eine Frage noch, warum bekomme ich einen Fehler???
Oder wie kann ich alle klassen dazu bewegen zu prüfen ob das formular abgesendet würde?


```
<%

class FormTag{
	
	String action = "";
	String method = "";
	String submit = "";
	String submitName = "";
	

	FormTag(String action){
		
		this.action = action;
		
	}
	
	FormTag(String action, String method){
		
		this.action = action;
		this.method = method;
		
	}
	
	String generateStartTag(){
		
		String tag = "<form method='"+this.method+"' action='"+this.action+"'>" ;
		return tag;
	}
	
	String generateEndTag(){
		
		String tag = "</form>" ;
		return tag;
		
	}
	
	String generateSubmitButton(String submit, String submitName){
		
		this.submit = submit;
		this.submitName = submitName;
		
		String tag = "<input type='submit' value='"+this.submit+"' name='"+this.submitName+"'>" ;
		return tag;
		
	}
	



}


class InputTypeText{
	
	String name = "";
	String value = "";
	String style = "";
	String size = "20";
	String patternType = "name";// Hier muss Pattern Standart für Text rein.
	
	
	
	
	InputTypeText(String name){
		
		if(request.getParameter("submit") != null){
			
			//Fehler hier!!!!
		}
		
		this.name = name;
	}
	
	InputTypeText(String name, String style){
		
		this.name  = name;
		this.style = style;
	}
	
	InputTypeText(String name, String style, String patternType){
		
		this.name = name;
		this.patternType = patternType;
		this.style = style;
	}
	
	
	String generateInput(){
		
		
		String tag = "<input class='"+this.style+"' type='text' name='"+this.name+"' size='"+this.size+"'>" ;
		return tag;
		
	}
	
	
}

%>
```


----------



## DocRandom (2. Feb 2007)

..welchen Fehler bekommst denn?

mfg
DocRandom


----------



## foxcomp (2. Feb 2007)

Hier der Fehler. Soll ein jsp werden das ein Formular automatisch erzeugt und auf Fehler überprüft danach werden die Formular Daten an eine E-Mail Adresse gesendet oder in ein MySQL geschrieben.
Dabei soll man wenn man, wenn man das Formular erzeugen will möglichst wenig Code eingeben daher muss alles auf klassen ebene gesehen ob das klappt ist eine andere Sache. Ich lerne gerade JSP und habe vorher PHP gemacht in PHP ist das kein Problem aber in java fehlt mir wahrscheinlich noch die Erfahrung.



```
Cannot refer to a non-final variable request inside an inner class defined in a different method
```


----------



## DocRandom (2. Feb 2007)

JSP ist nicht mein Ding, solltest Dich direkt an das JSP - Forum wenden.

mfg
DocRandom


----------



## foxcomp (2. Feb 2007)

Alles Klar danke nochmal


----------



## Tobias (2. Feb 2007)

Da wo "Fehler hier" steht, fehlt doch was, oder?

mpG
Tobias


----------



## foxcomp (2. Feb 2007)

Nein der Fehler sagt das er die request.getParameter() 
falsch ist oder hier in einer Klasse nicht angelegt werden kann.


----------



## Tobias (2. Feb 2007)

Ah, ok, habs gerafft. Du musst deinem Konstruktor einen Parameter request hinzufügen, über den du das Request-Objekt übergibst oder alternativ mal ausprobieren, ob es nicht vielleicht schon ausreicht die <%!-Deklarationstags statt der normalen <%-Scriplettags zu benutzen...

mpG
Tobias

P.S.: IMHO ist es günstiger, sich zunächst mit "normaler" Applikationsprogrammierung zu befassen, bevor man mit JSP rumspielt. Dann sind die Vorgänge im Hintergrund leichter zu durchschauen...


----------



## DocRandom (2. Feb 2007)

> .S.: IMHO ist es günstiger, sich zunächst mit "normaler" Applikationsprogrammierung zu befassen, bevor man mit JSP rumspielt. Dann sind die Vorgänge im Hintergrund leichter zu durchschauen...


hehehe, bin bei der 'normalen' Applicationsentwicklung hängen geblieben! 
Habe es bislang immer vermieden mich mit JSP auseinander zu setzen!

lg
DocRandom


----------

