Schnittstellen ????

Status
Nicht offen für weitere Antworten.
C

chrissie110

Gast
:( Hiiiilfeeee!!!!

Ich hab hier ein ziemlich langes Java-Programm... nun will ich es aber irgendwie übersichtlicher gesalten und nicht den gesamten Quelltext in der Main - Methode haben...
leider habe ich darin noch gar keine Erfahrungen.... vielleicht geht es irgendwie mit Schnittstellen??
Über Hilfe wäre ich sehr sehr dankbar...
Hier mein jetziger Quelltext:

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

public class Wetterstationen {  // Datei wird zeilenweise eingelesen

 
  public static void main(String[] args) throws IOException {
   try {
   	
        BufferedReader b = new BufferedReader (new InputStreamReader (
                   new FileInputStream ("epsa.dat")));
                   
                         
     String s = null;
     
      while ((s = b.readLine ()) != null) {
      	
      	int anf0 = s.indexOf("EPSA");
      	if (anf0 != -1)
      	 {
      	 	String s1 = s.substring(0,anf0);
      	 //	String wert0 = s.substring(anf0, s.length());
      	 
         
         
          for (int j = 0; j<s.length(); j++)
               {
                 s = s.replaceAll("  "," ");
               }
               
            String[] a1 = s.split(" ");
            String x0 = (a1[0]);
            System.out.println(" Station: " + x0);
            String x1 = (a1[3]);
            System.out.println(" Datum: " + x1);
            String x2 = (a1[4]);
            System.out.println(" Uhrzeit: " + x2);
            System.out.println(" ");
         }     	
              	
         int anf1 = s.indexOf("D0");             // Windrichtung
         if (anf1 != -1)
          {
            String s1 = s.substring(0,anf1);
            String wert1 = s.substring(anf1, s.length());
            System.out.println (" Windrichtung:");
            System.out.println (" ");
            System.out.println (wert1);
            System.out.println (" ");
                    
              for (int j = 0; j<s.length(); j++)
               {
                 s = s.replaceAll("  "," ");
               }
               
            String[] a = s.split(" ");
            double d1 = Double.parseDouble (a[1]);
              System.out.println(" 10 - Minuten - Mittelwert: " + d1 + " Grad");
            double d2 = Double.parseDouble (a[2]);
              System.out.println(" Minutenwert: " + d2 + " Grad");
              System.out.println(" ");
                    
          }
          
              
         int anf2 = s.indexOf("V0");            // Windgeschwindigkeit
         if (anf2 != -1)
          {
            String s1 = s.substring(0,anf2);
            String wert2 = s.substring(anf2, s.length());
            System.out.println (" Windgeschwindigkeit:");
            System.out.println (" ");
            System.out.println (wert2);
            System.out.println (" ");
                    
              for (int j = 0; j<s.length(); j++) 
               {
                 s = s.replaceAll("  "," ");
               }
              
            String[] a = s.split(" ");
            double d1 = Double.parseDouble (a[3]);
            double v1 =Math.round(d1*1.85);
              System.out.println(" Mittelwert letzte Stunde: " + v1 + " km/h");
            double d2 = Double.parseDouble (a[9]);
            double v2 = Math.round(d2*1.85);
              System.out.println(" Maximalwert letzte Stunde: " + v2 + " km/h");
            double d3 = Double.parseDouble (a[2]);
            double v3 = Math.round(d3*1.85);
              System.out.println(" Aktueller Wert: " + v3 + " km/h");
            double d4 = Double.parseDouble (a[1]);
            double v4 = Math.round(d4*1.85);
              System.out.println(" 10 - Minuten - Mittelwert: " + v4 + " km/h");
            double d5 = Double.parseDouble (a[8]);
            double v5 = Math.round(d5*1.85);
              System.out.println(" Windspitze letzte 10 min: " + v5 + " km/h");
              System.out.println(" ");
            
          }
b.close ();
     
  } catch ( FileNotFoundException e)  // Datei gibt's nicht
    {
     	System.err.println( "Datei gibt's nicht.");
    }
     catch ( IOException e )           // Schreib- Leseprobleme
    {
     	System.err.println( "Schreib- Leseprobleme");
    }
     catch ( Exception e)              // alles andere
    {
     	System.err.println( "Noch ein anderer Fehler.");
    }
    
    
    try {
    BufferedReader b = new BufferedReader (new InputStreamReader (
                   new FileInputStream ("vaisalamessage.txt")));

            String s = null;
            
              while ((s = b.readLine ()) != null) {
              	
              	int anf0 = s.indexOf("2003");
              	
              	if (anf0 != -1)
              	{
              		String s1 = s.substring(0, anf0);
              	    System.out.println("VAISALA-Station:");
              		
              		 for (int j = 0; j<s.length(); j++) {
                    	s = s.replaceAll("  "," ");
                    }
                     String[] k = s.split(" ");
                     String y0 = (k[0]);
                     System.out.println("Datum: " + y0);
                   
                     String y1 = (k[1]);
                     System.out.println("Uhrzeit: " + y1);
                     System.out.println(" ");
              	}
              	
              	
              	int anf1 = s.indexOf("RH");
            
                  if (anf1 != -1)
                  {
                    String s1 = s.substring(0,anf1);
                    String wert1 = s.substring(anf1, s.length());
                    System.out.println(" Luftfeuchtigkeit: ");
                    System.out.println(" ");
                    System.out.println (wert1);
                    System.out.println(" ");
                    
                    for (int j = 0; j<s.length(); j++) {
                    	s = s.replaceAll("  "," ");
                    }
                    String[] k = s.split(" ");
                    double rh1 = Double.parseDouble (k[3]);
                    System.out.println(" Minutenwert: " + rh1 + " %");
                    double rh2 = Double.parseDouble (k[4]);
                    System.out.println(" Mittelwert letzte Stunde: " + rh2 + " %");
                    double rh3 = Double.parseDouble (k[5]);
                    System.out.println(" Maximalwert letzte Stunde: " + rh3 + " %");
                    double rh4 = Double.parseDouble (k[6]);
                    System.out.println(" Minimalwert letzte Stunde: " + rh4 + " %");
                    System.out.println(" ");
            
                   }
               
             
                int anf2 = s.indexOf("P");
            
                  if (anf2 != -1)
                  {
                    String s1 = s.substring(0,anf2);
                    String wert2 = s.substring(anf2, s.length());
                    System.out.println(" Luftdruck: ");
                    System.out.println( " ");
                    System.out.println (wert2);
                    System.out.println(" ");
                    
                    for (int j = 0; j<s.length(); j++) {
                    	s = s.replaceAll("  "," ");
                    }
                    String[] k = s.split(" ");
                    double p1 = Double.parseDouble (k[3]);
                    System.out.println(p1);
                    double p2 = Double.parseDouble (k[4]);
                    System.out.println(p2);
                    double p3 = Double.parseDouble (k[5]);
                    System.out.println(p3);
                    double p4 = Double.parseDouble (k[6]);
                    System.out.println(p4);
                   }
              }  
                    
   b.close ();
   
   } catch ( FileNotFoundException e)  // Datei gibt's nicht
    {
     	System.err.println( "Datei gibt's nicht.");
    }
     catch ( IOException e )           // Schreib- Leseprobleme
    {
     	System.err.println( "Schreib- Leseprobleme");
    }
     catch ( Exception e)              // alles andere
    {
     	System.err.println( "Noch ein anderer Fehler.");
    }
    
   }
}

Dies ist nur ein "kleiner" Ausschnitt...
Es handelt sich hierbei um die Files von 2 verschiedenen Wetterstationen, deren Sensoren einzeln ausgelesen werden sollen... desweiteren muss die eine Wetterstation auf einige Werte der anderen zugreifen können....
 

jptc.org

Bekanntes Mitglied
Also als erstes solltes du das code - tag zum posten von sourcecode verwenden, denn das macht die lesbarkeit besser. so dann schau formatiere deinen sourcecode in einzelne blöcke und überlegen wie du die blöcke trennen kannst. lege eine neue klasse an, welche dir die benötigten funktionalitäten zur verfügung stellt. in deiner main hast du dann nur noch wenige zeilen code:

Code:
public static void main(String[] args) throws IOException { 
   MyClass myc = new MyClass();
   myc.doSomething();
   System.exit(0),
}

die Klasse MyClass enthält dann eine public methode, welche dir alle Aufgaben deiner main erledigt. so jetzt hast du eine neue klasse mit einer methode, diese methode splittest du am besten in mehrere methoden (ich hoffe du hattest die blöcke formattiert). die eine methode sollte am ende eigentlich fast nur noch methodenaufrufe kapseln.

versuchs mal.

good luck :)

Karsten Voigt
http://www.java-performance-portal.org
 

Stefan1200

Top Contributor
Hinweis: Benutze bitte den Code Befehl für den SourceCode hier im Forum.

Ich versuche dir mal ein paar Tipps zu geben, denn dein Source ist mir auch ein bissel unübersichtlich ;-)

Als erstes solltest du alles aus der main Methode alles in eine eigene Methode packen.
Und in der main methode die neue Methode starten.

Am Besten du teilst dein Sourcecode in mehrere Teilbereiche auf.
Zum Beispiel das Erste was du machst, ist das Einlesen einer Datei.
Das wäre zum Beispiel die erste Methode:

Code:
private String readFile()
{
    String s = null;
    try {

        BufferedReader b = new BufferedReader (new InputStreamReader(new FileInputStream("epsa.dat")));

        while ((s = b.readLine ()) != null)
        {
        }
    }
    catch ( FileNotFoundException e) // Datei gibt's nicht
    {
    System.err.println( "Datei gibt's nicht.");
    }
    catch ( IOException e ) // Schreib- Leseprobleme
    {
    System.err.println( "Schreib- Leseprobleme");
    }
    catch ( Exception e) // alles andere
    {
    System.err.println( "Noch ein anderer Fehler.");
    }

    return s;
}

Dann kannst du unten einfach schreiben

String s = readFile();

usw.

Bei weiteren Fragen, einfach genauer formulieren.
 
C

chrissie110

Gast
Hallo!!

Erstmal vielen Dank für die Antwort... bin schon ne Weile am tüfteln wie ich das Programm am besten in Methoden aufteile... nur leider habe ich darin so gut wie gar keine Erfahrungen... :?
könntest du mir da bitte ein Beispiel geben?? Vielleicht wie ich das mit der Windgeschwindigkeit am besten mache oder so???
Vielen vielen Dank schonmal...
 

gustav

Aktives Mitglied
Also will mal versuchen Dir zu helfen,

1. generell sollten Methoden nicht übermäßig lang werden, denn soviel wie ich weiss gibt es in der JVM eine Beschränkung, d.h. der Compiler muss die Methode irgendwie aufsplitten. -> Performanceverlust
Aber das sollte für Deine Sache nicht wirklich von Bedeutung sein

2. Die Windgeschwindigkeit habe ich mal (frei Hand ohne Java Compiler) in eine Methode gesteckt

Code:
private static void calcWindSpeed(String inputStr)      // Windgeschwindigkeit
{
  if (inputStr != null)  // falls fehlerhafter Aufruf
  {
    int anf2 = inputStr.indexOf("V0");        
    if (anf2 != -1)
    {
      String s1 = inputStr.substring(0,anf2);
      String wert2 = inputStr.substring(anf2, s.length());
      System.out.println (" Windgeschwindigkeit:");
      System.out.println (" ");
      System.out.println (wert2);
      System.out.println (" ");
                   
      for (int j = 0; j<s.length(); j++)
      {
        inputStr = inputStr.replaceAll("  "," ");
      }
             
      String[] a = inputStr.split(" ");
      double d1 = Double.parseDouble (a[3]);
      double v1 =Math.round(d1*1.85);
      System.out.println(" Mittelwert letzte Stunde: " + v1 + " km/h");
      double d2 = Double.parseDouble (a[9]);
      double v2 = Math.round(d2*1.85);
      System.out.println(" Maximalwert letzte Stunde: " + v2 + " km/h");
      double d3 = Double.parseDouble (a[2]);
      double v3 = Math.round(d3*1.85);
      System.out.println(" Aktueller Wert: " + v3 + " km/h");
      double d4 = Double.parseDouble (a[1]);
      double v4 = Math.round(d4*1.85);
      System.out.println(" 10 - Minuten - Mittelwert: " + v4 + " km/h");
      double d5 = Double.parseDouble (a[8]);
      double v5 = Math.round(d5*1.85);
      System.out.println(" Windspitze letzte 10 min: " + v5 + " km/h");
      System.out.println(" ");
    } 
  }
}
Für den Anfang ist es erst mal eine static Methode (d.h. an keine Objektinstanz gebunden).
In der ursprünglichen Methode (main()) schreibst Du an die Stelle an der diese Codesequenz mal stand einfach nur calcWindSpeed() ;

3. Falls Du main() irgendwann man nach diesem Schema aufgeteilt hast, kannst Du dazu übergehen Objekte zu erzeugen.

Das geht dann ungefähr so :
- falls in main noch etwas drin steht - umbennen z.B. mainRoutine()
- bei allen Methode (auch mainRoutine() ) das static entfernen
- neue main() Methode schreiben z.B.

Code:
public static void main(String args[])
{
   OwnObject me = new OwnObject() ;
   me.mainRoutine() ;  
}
 
G

Guest

Gast
Hm.. ich hab das nun mal versucht... kriege aber eine Fehlermeldung...

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

public class Wetterstationen1 {  // Datei wird zeilenweise eingelesen


private String readFile() 
{ 
    String s = null; 
    try { 

        BufferedReader b = new BufferedReader (new InputStreamReader(new FileInputStream("epsa.dat"))); 

        while ((s = b.readLine ()) != null) 
        { 
        } 
    } 
    catch ( FileNotFoundException e) // Datei gibt's nicht 
    { 
    System.err.println( "Datei gibt's nicht."); 
    } 
    catch ( IOException e ) // Schreib- Leseprobleme 
    { 
    System.err.println( "Schreib- Leseprobleme"); 
    } 
    catch ( Exception e) // alles andere 
    { 
    System.err.println( "Noch ein anderer Fehler."); 
    } 

    return s; 
}
private static void calcWindSpeed(String inputStr)      // Windgeschwindigkeit 
{ 
  if (inputStr != null)  // falls fehlerhafter Aufruf 
  { 
    int anf2 = inputStr.indexOf("V0");        
    if (anf2 != -1) 
    { 
      String s1 = inputStr.substring(0,anf2); 
      String wert2 = inputStr.substring(anf2, inputStr.length()); 
      System.out.println (" Windgeschwindigkeit:"); 
      System.out.println (" "); 
      System.out.println (wert2); 
      System.out.println (" "); 
                    
      for (int j = 0; j<inputStr.length(); j++) 
      { 
        inputStr = inputStr.replaceAll("  "," "); 
      } 
              
      String[] a = inputStr.split(" "); 
      double d1 = Double.parseDouble (a[3]); 
      double v1 =Math.round(d1*1.85); 
      System.out.println(" Mittelwert letzte Stunde: " + v1 + " km/h"); 
      double d2 = Double.parseDouble (a[9]); 
      double v2 = Math.round(d2*1.85); 
      System.out.println(" Maximalwert letzte Stunde: " + v2 + " km/h"); 
      double d3 = Double.parseDouble (a[2]); 
      double v3 = Math.round(d3*1.85); 
      System.out.println(" Aktueller Wert: " + v3 + " km/h"); 
      double d4 = Double.parseDouble (a[1]); 
      double v4 = Math.round(d4*1.85); 
      System.out.println(" 10 - Minuten - Mittelwert: " + v4 + " km/h"); 
      double d5 = Double.parseDouble (a[8]); 
      double v5 = Math.round(d5*1.85); 
      System.out.println(" Windspitze letzte 10 min: " + v5 + " km/h"); 
      System.out.println(" "); 
      } 
    } 
  }
  
  public static void main(String[] args) throws IOException {
  	
  	calcWindSpeed(); 

 	
 }
}

Nun schreibt er mir: C:\java\Wetterstationen1.java:76: calcWindSpeed(java.lang.String) in Wetterstationen1 cannot be applied to ()
calcWindSpeed();

Hiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiilfe!!!! :(
 

Stefan1200

Top Contributor
Du rufst ja calcWindSpeed(); ohne String auf.
Wie du selbst siehst, benötigt deine Methode einen String, siehe hier:

Code:
private static void calcWindSpeed(String inputStr)

Ganz rechts siehst du String inputStr

Das heisst, dein Methodenaufruf muss auch einen String übergeben, zum Beispiel so:

Code:
calcWindSpeed(readFile());
 
C

chrissie110

Gast
Vielen Dank!!

Ich hab das nun so gemacht... krieg allerdings wieder einen Fehler, und zwar:


C:\java\Wetterstationen1.java:81: non-static method readFile() cannot be referenced from a static context
calcWindSpeed(readFile());

kann damit allerdings wenig anfangen... :?
 

Stefan1200

Top Contributor
Ändere mal um in:

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

public class Wetterstationen1 {  // Datei wird zeilenweise eingelesen 


private String readFile() 
{ 
    String s = null; 
    try { 

        BufferedReader b = new BufferedReader (new InputStreamReader(new FileInputStream("epsa.dat"))); 

        while ((s = b.readLine ()) != null) 
        { 
        } 
    } 
    catch ( FileNotFoundException e) // Datei gibt's nicht 
    { 
    System.err.println( "Datei gibt's nicht."); 
    } 
    catch ( IOException e ) // Schreib- Leseprobleme 
    { 
    System.err.println( "Schreib- Leseprobleme"); 
    } 
    catch ( Exception e) // alles andere 
    { 
    System.err.println( "Noch ein anderer Fehler."); 
    } 

    return s; 
} 
private void calcWindSpeed(String inputStr)      // Windgeschwindigkeit 
{ 
  if (inputStr != null)  // falls fehlerhafter Aufruf 
  { 
    int anf2 = inputStr.indexOf("V0");        
    if (anf2 != -1) 
    { 
      String s1 = inputStr.substring(0,anf2); 
      String wert2 = inputStr.substring(anf2, inputStr.length()); 
      System.out.println (" Windgeschwindigkeit:"); 
      System.out.println (" "); 
      System.out.println (wert2); 
      System.out.println (" "); 
                    
      for (int j = 0; j<inputStr.length(); j++) 
      { 
        inputStr = inputStr.replaceAll("  "," "); 
      } 
              
      String[] a = inputStr.split(" "); 
      double d1 = Double.parseDouble (a[3]); 
      double v1 =Math.round(d1*1.85); 
      System.out.println(" Mittelwert letzte Stunde: " + v1 + " km/h"); 
      double d2 = Double.parseDouble (a[9]); 
      double v2 = Math.round(d2*1.85); 
      System.out.println(" Maximalwert letzte Stunde: " + v2 + " km/h"); 
      double d3 = Double.parseDouble (a[2]); 
      double v3 = Math.round(d3*1.85); 
      System.out.println(" Aktueller Wert: " + v3 + " km/h"); 
      double d4 = Double.parseDouble (a[1]); 
      double v4 = Math.round(d4*1.85); 
      System.out.println(" 10 - Minuten - Mittelwert: " + v4 + " km/h"); 
      double d5 = Double.parseDouble (a[8]); 
      double v5 = Math.round(d5*1.85); 
      System.out.println(" Windspitze letzte 10 min: " + v5 + " km/h"); 
      System.out.println(" "); 
      } 
    } 
  } 
  
  public static void main(String[] args) throws IOException { 
      
     Wetterstationen1 initMe = new Wetterstationen1();
     initMe.startMe();

  } 

  private void startMe()
  {
      calcWindSpeed(readFile());
  }
}
 
C

chrissie110

Gast
:D Suuuper!! Das klappt ohne Fehlermeldung!! Vielen vielen Dank dafür...

Allerdings gibt er mir nun nichts auf dem Bildschirm aus...
Muss da noch eine System.out.println hin??? :oops:
 

Stefan1200

Top Contributor
Ändere mal in meinem letzten Sourcecode

Code:
        while ((s = b.readLine ()) != null) 
        { 
        }

um in

Code:
        while ((s += b.readLine()) != null) 
        { 
        }
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
B Kommunikation mit Seriellen Schnittstellen + Integration einer lib Java Basics - Anfänger-Themen 1
Fragerjava Java Schnittstellen Java Basics - Anfänger-Themen 6
L Abstrakte Typen und Schnittstellen Java Basics - Anfänger-Themen 19
S Zufallszahl-Generatoren (Schnittstellen) Java Basics - Anfänger-Themen 14
N Generische Schnittstellen Java Basics - Anfänger-Themen 2
K Welchen Typ haben Variablen in Default-Methoden und in statischen Methoden in Schnittstellen? Java Basics - Anfänger-Themen 4
Helgon Interface Runnable Frage / Schnittstellen allgemein Java Basics - Anfänger-Themen 3
S ich begreife es einfach nicht -> zweck der Schnittstellen Java Basics - Anfänger-Themen 27
D Interfaces / Schnittstellen Java Basics - Anfänger-Themen 8
C Schnittstellen und Abstrakte Klassen Java Basics - Anfänger-Themen 3
G Schnittstellen Programmierung Java Basics - Anfänger-Themen 5
G in Java mit Schnittstellen arbeiten Java Basics - Anfänger-Themen 5
G Nutzen von Schnittstellen Java Basics - Anfänger-Themen 14
M abstrakte klassen / Schnittstellen Java Basics - Anfänger-Themen 4
E Schnittstellen und Objekte in komplizierter Form Java Basics - Anfänger-Themen 10
E Wozu dienen Schnittstellen? Java Basics - Anfänger-Themen 16
G schnittstellen Java Basics - Anfänger-Themen 4
Y Frage zu Schnittstellen Java Basics - Anfänger-Themen 17

Ähnliche Java Themen

Neue Themen


Oben