Uniaufgabe

Status
Nicht offen für weitere Antworten.
E

Egon

Gast
Hallo Java-Experten, also ich bin es nicht :cry: !!

Ich muss ein Programm schreiben das die Standardabweichung und Mittelwert berechnet. Die Zahlen kommen aus einer Datei, die eingelesen wird. Ich weiß nicht, irgendwie läuft das Programm nicht und ich weiß absolut nicht warum. Bitte um Hilfe

Das ist mein Code
Code:
package package7;

import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.io.StreamTokenizer;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.StringTokenizer;



	public class Statistik {

		  protected double [] x;
		  /*
		   * Der Konstruktor.
		   * xv das Double-Array
		   */
		  
	  
		  public Statistik(double [] xv)
		  {
		    x = new double[xv.length];
		    for(int i = 0; i < x.length; i++) x[i] = xv[i];
		  }

		  /*
		   * Berechnet den Mittelwert
		   * return den Mittelwert
		   */
		  public double mittelwert()
		  {
		    double mittel = 0.0;
		    for(int i = 1; i < x.length; i++) mittel += x[i];
		    mittel /= x.length;
		    return mittel;
		  }
	  
		  /*
		   * Berechnet die Standardabweichung 
		   * return die Standardabweichung
		   */
	public double standardabweichung()
		  {
		    double standardabweichung = 0.0;
		    double mean = mittelwert();
		    for(int i = 1; i < x.length; i++) standardabweichung += (x[i] - mean) * (x[i] - mean);
		    standardabweichung = Math.sqrt(standardabweichung / (x.length - 1.0));
		    return standardabweichung;
		  }
	
       	public double[] readFile(String fileName) {
    		BufferedReader br;
    		String line;
    		LinkedList numbers = new LinkedList();
    		
    		/* Lesen der Datei */
            try{
    			br = new BufferedReader(new FileReader("C:\\Zahlen.txt"));
    			/* jede Zeile wird als String in eine Liste geschrieben */
    			while( (line = br.readLine()) != null){
    				numbers.add(line);
    			 }
    			br.close();
    			}
    		catch( FileNotFoundException fnfe){
    			System.out.println(fnfe.toString());
    		}
    		catch( IOException ioe){
    			System.out.println(ioe.toString());
    		}
    		
    		/* Array mit der Lände der Liste anlegen */
    		double[] values = new double[numbers.size()];
    		
    		/* Liste durchlaufen, Strings in Zahlen umwandeln
    		 * und in Array schreiben */
    		Iterator it = numbers.iterator();
    		int i = 0;
    		
    		while(it.hasNext()){
    			line = (String) it.next();
    			values[i] = Double.parseDouble(line);
    			i++;
    		}
    		
    		/* Array mit Zahlen zurück geben*/
    		return values;
    		
    	}
	
    public static void main(String[] args) {
    	double [] x = new double[140];
        for(int i = 0; i < x.length; i++) x[i] = Math.random();
        Statistik statistik = new Statistik(x);
        System.out.println("Mittelwert: " + statistik.mittelwert());
        System.out.println("Standardabweichung: " + statistik.standardabweichung());


    }}
 
B

bygones

Gast
Egon hat gesagt.:
Ich muss ein Programm schreiben das die Standardabweichung und Mittelwert berechnet. Die Zahlen kommen aus einer Datei, die eingelesen wird. Ich weiß nicht, irgendwie läuft das Programm nicht und ich weiß absolut nicht warum. Bitte um Hilfe
auch wenn du nicht ein Experte bist ist es wohl nicht zuviel verlangt zu sagen, was nicht funktionert... rechnet er falsch, meldet Java Fehler usw ? es sollte nicht so schwer sein ein paar mehr infos zu geben.

Hast du den Code selber geschrieben ?

als Tipp: mittelwert und st.abweichung scheinen momentan gern genommen zu werden - und dann auch noch aus einer Datei auslesen - hatten wir hier schon mal.... NUTZ die Boardsuche !!!
 
E

Egon

Gast
Danke das du antwortest. Die habe ich schon hier benutzt, allerdings konnte die mir hier nicht weiterhelfen. Versuche es deshalb über diesen Weg. Wäre schön wenn Du mir helfen könntest !!!
 
B

bygones

Gast
bitte ganzen Post lese ;-)

deathbyaclown hat gesagt.:
auch wenn du nicht ein Experte bist ist es wohl nicht zuviel verlangt zu sagen, was nicht funktionert... rechnet er falsch, meldet Java Fehler usw ? es sollte nicht so schwer sein ein paar mehr infos zu geben.
 
E

Egon

Gast
Code:
Exception in thread "main" java.lang.Error: Unresolved compilation problems: 
	potte cannot be resolved
	The method median() is undefined for the type Statistik

	at package7.Statistik.main(Statistik.java:97)
 
B

bygones

Gast
hä ? sicher dass du mit dieser Klasse arbeitest ?

potte kommt da nicht vor & median auch nicht.....
 
G

Guest

Gast
Habe das jetzt geändert . Stimmt Potte gab es nicht und Median mußte ich ja noch rechnen. Das Programm läuft immer noch nicht :cry: !!! Am Anfang muss irgendwas nicht stimmen , aber was ??
 
B

bygones

Gast
copy & paste dein Programm übernommen - dummy Datei erstellt... programm läuft....
 
E

Egon

Gast
Tut mir leid, dass ich mich blöd anstelle aber das läuft bei Dir nicht. Hier nochmal mein Code

Code:
package package7;

import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.Iterator;
import java.util.LinkedList;



	public class Statistik {

		  protected static double [] x;
		  
		  /*
		   * Der Konstruktor.
		   * potte das Double-Array
		   */
		  
	  
		  public Statistik(double [] bb)
		  {
		    x = new double[x.length];
		    for(int i = 0; i < x.length; i++) x[i] = bb[i];
		  }

		  /*
		   * Berechnet den Mittelwert
		   * return den Mittelwert
		   */
		  public double mittelwert()
		  {
		    double mittel = 0.0;
		    for(int i = 1; i < x.length; i++) mittel += x[i];
		    mittel /= x.length;
		    return mittel;
		  }
	  
		  /*
		   * Berechnet die Standardabweichung 
		   * return die Standardabweichung
		   */
		  
	public double standardabweichung()
		  {
		    double standardabweichung = 0.0;
		    double mean = mittelwert();
		    for(int i = 1; i < x.length; i++) standardabweichung += (x[i] - mean) * (x[i] - mean);
		    standardabweichung = Math.sqrt(standardabweichung / (x.length - 1.0));
		    return standardabweichung;
		  }
	
       	public double[] readFile(String fileName) {
    		BufferedReader br;
    		String line;
    		LinkedList numbers = new LinkedList();
    		
    		/* Lesen der Datei */
            try{
    			br = new BufferedReader(new FileReader("C:\\Zahlen.txt"));
    			/* jede Zeile wird als String in eine Liste geschrieben */
    			while( (line = br.readLine()) != null){
    				numbers.add(line);
    			 }
    			br.close();
    			}
    		catch( FileNotFoundException fnfe){
    			System.out.println(fnfe.toString());
    		}
    		catch( IOException ioe){
    			System.out.println(ioe.toString());
    		}
    		
    		/* Array mit der Lände der Liste anlegen */
    		double[] values = new double[numbers.size()];
    		
    		/* Liste durchlaufen, Strings in Zahlen umwandeln
    		 * und in Array schreiben */
    		Iterator it = numbers.iterator();
    		int i = 0;
    		
    		while(it.hasNext()){
    			line = (String) it.next();
    			values[i] = Double.parseDouble(line);
    			i++;
    		}
    		
    		/* Array mit Zahlen zurück geben*/
    		return values;
    		
    	}
	
    public static void main(String[] args){
        Statistik statistik = new Statistik(x);
        System.out.println("Mittelwert: " + statistik.mittelwert());
        System.out.println("Standardabweichung: " + statistik.standardabweichung());
        


    }}
 
B

bygones

Gast
der code läuft bei mir... wenn du willst können wir dieses Spielchen gern noch die ganze nacht durchmachen...

also bitte - was läuft nicht - meldet er fehler, macht er einfach nichts oder was ???
 
E

Egon

Gast
Nein , das brauchen wir nicht :D !! Der gibt immer folgende Fehlermeldung !!

Code:
Exception in thread "main" java.lang.NullPointerException
	at package7.Statistik.<init>(Statistik.java:24)
	at package7.Statistik.main(Statistik.java:95)
 
B

bygones

Gast
hey du hast den Code geändert ....

Code:
public Statistik(double [] bb)
        {
          x = new double[x.length];
          for(int i = 0; i < x.length; i++) x[i] = bb[i];
        }
in der Zeile x = new double[x.length] liegt der Fehler... x ist noch nicht initialisiert, ergo Null, ergo NullPointerException

im obigen Code hast du
Code:
public Statistik(double [] xv)
        {
          x = new double[xv.length];
          for(int i = 0; i < x.length; i++) x[i] = xv[i];
        }
hier greifst du auf den Parameter Array zu, der ist nicht Null, ergo keine NullPointer
 
E

Egon

Gast
Kannste mal bitte den Code von 1:20 nehmen den ich reingestellt habe !!! Der läuft nämlich nicht, Fehlermeldung in Zeile 25 und 94. Was du gerade geschrieben hast, habe ich geändert !!!
 
B

bygones

Gast
ich dreh einfach mal den Spieß um - dieser Code läuft bei mir

Code:
package test;

import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.io.StreamTokenizer;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.StringTokenizer;

public class Test2 {

	protected double[] x;
	/*
	 * Der Konstruktor. xv das Double-Array
	 */

	public Test2( double[] xv ) {
		x = new double[ xv.length ];
		for ( int i = 0; i < x.length; i++ )
			x[ i ] = xv[ i ];
	}

	/*
	 * Berechnet den Mittelwert return den Mittelwert
	 */
	public double mittelwert() {
		double mittel = 0.0;
		for ( int i = 1; i < x.length; i++ )
			mittel += x[ i ];
		mittel /= x.length;
		return mittel;
	}

	/*
	 * Berechnet die Standardabweichung return die Standardabweichung
	 */
	public double standardabweichung() {
		double standardabweichung = 0.0;
		double mean = mittelwert();
		for ( int i = 1; i < x.length; i++ )
			standardabweichung += ( x[ i ] - mean ) * ( x[ i ] - mean );
		standardabweichung = Math
				.sqrt( standardabweichung / ( x.length - 1.0 ) );
		return standardabweichung;
	}

	public double[] readFile(String fileName) {
		BufferedReader br;
		String line;
		LinkedList numbers = new LinkedList();

		/* Lesen der Datei */
		try {
			br = new BufferedReader( new FileReader( "Zahlen.txt" ) );
			/* jede Zeile wird als String in eine Liste geschrieben */
			while ( ( line = br.readLine() ) != null) {
				numbers.add( line );
			}
			br.close();
		}
		catch ( FileNotFoundException fnfe ) {
			System.out.println( fnfe.toString() );
		}
		catch ( IOException ioe ) {
			System.out.println( ioe.toString() );
		}

		/* Array mit der Lände der Liste anlegen */
		double[] values = new double[ numbers.size() ];

		/*
		 * Liste durchlaufen, Strings in Zahlen umwandeln und in Array schreiben
		 */
		Iterator it = numbers.iterator();
		int i = 0;

		while (it.hasNext()) {
			line = ( String ) it.next();
			values[ i ] = Double.parseDouble( line );
			i++;
		}

		/* Array mit Zahlen zurück geben */
		return values;

	}

	public static void main(String[] args) {
		double[] x = new double[ 140 ];
		for ( int i = 0; i < x.length; i++ )
			x[ i ] = Math.random();
		Test2 statistik = new Test2( x );
		System.out.println( "Mittelwert: " + statistik.mittelwert() );
		System.out.println( "Standardabweichung: "
				+ statistik.standardabweichung() );

	}
}
ich habe Klassenname und package name geändert, weil ich zu faul war deine Angaben bei mir ins eclipse zu hauen ^^ daran kann es aber nicht liegen :p
 
G

Guest

Gast
Ist ja klar das der lauft, weil der ja in der main von 140 Zufallswerten die Lösungen bildet. Der nimmt ja nicht die Werte aus der eingelesenen Datei !!!
 
B

bygones

Gast
Anonymous hat gesagt.:
Ist ja klar das der lauft, weil der ja in der main von 140 Zufallswerten die Lösungen bildet. Der nimmt ja nicht die Werte aus der eingelesenen Datei !!!
lol geil - da hab ich ja mal blind copy und paste betrieben :p sollte mir den Code auch mal anschauen...

habe 2 änderungen mal gemacht
Code:
		double[] x = readFile( "Zahlen.txt");
		Test2 statistik = new Test2(x);
		System.out.println( "Mittelwert: " + statistik.mittelwert() );
		System.out.println( "Standardabweichung: "
				+ statistik.standardabweichung() );
und hab die Methode readFile static gemacht.

Andere Möglichkeit, die Methode nicht static machen, dann musst du aber das Objekt zuerst erzeugen, kannst dann aber nicht den Array x übergeben, da er ja noch nicht existiert.... da könnte man dann z.b. in der Methode readFile den array setzen lassen und nicht zurückgebe
 
G

Guest

Gast
Habe das jetzt so gemacht !! Bei dem Code

Code:
package test; 

import java.io.BufferedReader; 
import java.io.FileNotFoundException; 
import java.io.FileReader; 
import java.io.IOException; 
import java.io.StreamTokenizer; 
import java.util.Iterator; 
import java.util.LinkedList; 
import java.util.StringTokenizer; 

public class Test2 { 

   protected double[] x; 
   /* 
    * Der Konstruktor. xv das Double-Array 
    */ 

   public Test2( double[] xv ) { 
      x = new double[ xv.length ]; 
      for ( int i = 0; i < x.length; i++ ) 
         x[ i ] = xv[ i ]; 
   } 

   /* 
    * Berechnet den Mittelwert return den Mittelwert 
    */ 
   public double mittelwert() { 
      double mittel = 0.0; 
      for ( int i = 1; i < x.length; i++ ) 
         mittel += x[ i ]; 
      mittel /= x.length; 
      return mittel; 
   } 

   /* 
    * Berechnet die Standardabweichung return die Standardabweichung 
    */ 
   public double standardabweichung() { 
      double standardabweichung = 0.0; 
      double mean = mittelwert(); 
      for ( int i = 1; i < x.length; i++ ) 
         standardabweichung += ( x[ i ] - mean ) * ( x[ i ] - mean ); 
      standardabweichung = Math 
            .sqrt( standardabweichung / ( x.length - 1.0 ) ); 
      return standardabweichung; 
   } 

   public static double[] readFile(String fileName) { 
      BufferedReader br; 
      String line; 
      LinkedList numbers = new LinkedList(); 

      /* Lesen der Datei */ 
      try { 
         br = new BufferedReader( new FileReader("C:\\Zahlen.txt")); 
         /* jede Zeile wird als String in eine Liste geschrieben */ 
         while ( ( line = br.readLine() ) != null) { 
            numbers.add( line ); 
         } 
         br.close(); 
      } 
      catch ( FileNotFoundException fnfe ) { 
         System.out.println( fnfe.toString() ); 
      } 
      catch ( IOException ioe ) { 
         System.out.println( ioe.toString() ); 
      } 

      /* Array mit der Lände der Liste anlegen */ 
      double[] values = new double[ numbers.size() ]; 

      /* 
       * Liste durchlaufen, Strings in Zahlen umwandeln und in Array schreiben 
       */ 
      Iterator it = numbers.iterator(); 
      int i = 0; 

      while (it.hasNext()) { 
         line = ( String ) it.next(); 
         values[ i ] = Double.parseDouble( line ); 
         i++; 
      } 

      /* Array mit Zahlen zurück geben */ 
      return values; 

   } 

   public static void main(String[] args) { 
	   double[]x= readFile("C:\\Zahlen.txt");
      Test2 statistik = new Test2( x ); 
      System.out.println( "Mittelwert: " + statistik.mittelwert() ); 
      System.out.println( "Standardabweichung: " 
            + statistik.standardabweichung() ); 

   } 
}

habe ich folgende Fehlermeldung

Code:
Exception in thread "main" java.lang.NumberFormatException: empty String
	at sun.misc.FloatingDecimal.readJavaFormatString(Unknown Source)
	at java.lang.Double.parseDouble(Unknown Source)
	at test.Test2.readFile(Test2.java:81)
	at test.Test2.main(Test2.java:91)
 
B

bygones

Gast
da stimmt deine Datei nicht
es wird ein leerer String gelesen und versuch in ein Double zu wandeln... geht dann leider net
 
B

bygones

Gast
in jeder Zeile ein wert:

Code:
1.1
2.4
3.55
4
5545
667
77
8
 
G

Guest

Gast
tut mir leid, aber der macht immer noch die gleichen Fehlermeldungen ????!!!! Woran könnte das liegen
 
B

bygones

Gast
zufällig am ende der datei eine leerzeile...

machs einfach so
Code:
while ( ( line = br.readLine() ) != null) {
   if(!("".equals(line))) {
     numbers.add( line );
   }
}
d.h. wenn eine Leerzeile kommt wird die gar nicht beachtet
 
G

Guest

Gast
saugeil läuft !!! Meinst DU wir kriegen noch gemeinsam den Median hin ???
 
G

Guest

Gast
Aber wenn ich in der Zahlendatei 1 1 1 schreibe dann ist das irgendwie falsch
 
E

Egon/Potte

Gast
Hey, habe das Programm fertig bekommen. Danke für Deine Hilfe. Besten Dank
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Oben