BlueJ Array

Garry

Mitglied
Erstellen Sie eine Klasse zur Berechnung von Mittelwert und Standardabweichung von n Werten
einer Messreihe. Folgende Vorgaben sollten Sie dabei beachten:
• Die n Werte sollen in einem Array gespeichert werden.
• Schreiben Sie zunächst einen Standardkonstruktor, der 10 von Ihnen frei wählbare Zahlen in
dem Array speichert..

Wir haben ein rießen Problem mit dem Arrays. Wir kommen einfach an dieser Stelle nicht weiter. Die Aufgabe geht zwar weiter, aber unser Hauptproblem besteht hier. Kann uns da vielleicht jemand weiterhelfen? Wie könnte der Quellcode aussehen? Ich bedanke mich schonmal im Vorraus :)
 

XHelp

Top Contributor
Was habt ihr denn bis jetzt? Eine Zahl in einer Array zu schreiben sollte ja wohl in jedem Anfängerbuch behandelt werden
 

Garry

Mitglied
Java:
 public double Mittelwert (int n1, int n2....int n10)
{ 
    int[] Zahlen = new int [11];
    double erg = ((n1+n2+....+n10)/10);
    retunr erg;
}

das haben wir bis jetzt und das funktioniert einwandfrei, doch unsere Frage wäre, ob man es auch nicht so umständlich realisieren könnte.

Die zweite Frage ist für die Standardabweichung brauchen wir das Ergebnis vom Mittelwert, wie kann ich das Ergebnis vom Mittelwert für die Methode Standardabweichung benutzen ?

Danke im Vorraus ;)
 
Zuletzt bearbeitet:

Garry

Mitglied
Java:
public class Zahlen{
    
private int zahl[];

public Zahlen()
{
zahl = new int[11];
}

soll es vielleicht so aussehn?
 
Zuletzt bearbeitet:

Garry

Mitglied
Wir haben jetzt jedem Array einen Wert zugewiesen.
Meine konkrete Frage wäre: Wie kann diese Werte in meiner Methode aufrufen, um beispielsweise eine einfache Addition durchzuführen? danke
 

Garry

Mitglied
Java:
public class Zahlen{
    
private int zahl[];

public Zahlen()
{
int zahl[];
zahl = new int[10];
zahl[0]=1;
zahl[1]=1;
zahl[2]=1;
zahl[3]=1;
zahl[4]=1;
zahl[5]=1;
zahl[6]=1;
zahl[7]=1;
zahl[8]=1;
zahl[9]=1;
{
public double Mittelwert()
{
das haben wir gemacht
 
Zuletzt bearbeitet:

XHelp

Top Contributor
jedem Array? Wieviele habt ihr denn? Vermutlich habt ihr das Array in der Methode deklariert. Dieses ist natürlich nur innerhalb der Methode gültig. Stattdessen sollte es bestimmt eine Instanzvariable sein.

Edit: Poste doch alles in einem Post und benutze Java-Tags. Ist ja nicht so, dass es ROT auf der Seite steht.

P.S. Bevor die Diskussion weiter geht, schlage ich vor du setzt in deinen bischerigen Beiträgen die JAVA-Tags
 
Zuletzt bearbeitet:

Garry

Mitglied
Java:
public class Zahlen
{
    
private int n [];

Zahlen()
{

n = new int [10];
n[0]=1;
n[1]=1;
n[2]=1;
n[3]=1;
n[4]=1;
n[5]=1;
n[6]=1;
n[7]=1;
n[8]=1;
n[9]=1;
}

public void Mittelwert()
{
double erg;
erg= 


}
}

sorry wenn ichs so umständlich gemacht habe, aber bin leider neu im Forum. Aso ja genau, wie kann ich jetzt das Array in meiner Methode aufrufen und damit eine einfache Addition aller Zahler durchzuführen?
 
Zuletzt bearbeitet:

Garry

Mitglied
Na ja lange Geschichte. Eigentlich ist das hier so eine einmalige Sache. Leider check ich das Programmieren auf keinen Meter. Es will mir einfach nicht in den Kopf gehen. Es gibt Sachen die versteht einer sehr gut und es gibt Sachen, die versteht man zum verrecken nicht. Mit Matlab ist das z.B. eine ganz andere Sache bei mir. Das verstehe ich, obwohl das im Prinzip das "gleiche" ist. Shit happens!
 

XHelp

Top Contributor
"einmalige Sache" hört sich an wie "gestern gerade mal angefangen". Dann ist es ja klar, dass du es nicht "checks". Aber mit oder ohne Ahnung lassen sich deine Fragen in 10 Sekunden bei google beantworten.
 

Garry

Mitglied
Java:
public class Zahlen
{
    
private int n [];

Zahlen()
{

n = new int [10];
n[0]=1;
n[1]=1;
n[2]=1;
n[3]=1;
n[4]=1;
n[5]=1;
n[6]=1;
n[7]=1;
n[8]=1;
n[9]=1;
}

public int Mittelwert(int erg)
{


for(int i=0;i<10;i++)

erg += n[i];
return erg;



}

Ich habe das mal soweit. Wenn ich jetzt ein Objekt erzeuge und die Zahl 0 eingebe, gibt er mir die Zahl 10 raus, aber wenn ich Zahl 10 schreibe gibt er mir 20 raus. Sprich das Programm addiert die Zahlen auf die eingegebenen. Wie kann ich das am besten realisieren, dass er nur das Ergebnis der Addition hergibt?

Java:
public class Zahlen
{
    
private double n [];

Zahlen()
{

n = new double [10];
n[0]=2;
n[1]=2;
n[2]=2;
n[3]=2;
n[4]=2;
n[5]=2;
n[6]=2;
n[7]=2;
n[8]=10;
n[9]=30;
}

public double Mittelwert(double summe)
{

double erg=0;
for(int i=0;i<n.length;i++)

erg += n[i];
summe= erg/n.length;
return summe;



}
}

Jetzt habe ich es so gemacht. Scheint auch soweit zu stimmen. Leider gibt er mit ein falsches ergebnis raus. Es handelt sich zwar nur um eine Differenz von 0.2, aber trotzdem ungenau.
 
Zuletzt bearbeitet:

Garry

Mitglied
Java:
public class Statistik
{   public static void main (String args[])
    {  
      
        double n [];
        n = new double [10];
        n[0]=10;
        n[1]=10;
        n[2]=10;
        n[3]=10;
        n[4]=10;
        n[5]=10;
        n[6]=10;
        n[7]=10;
        n[8]=10;
        n[9]=30;
        int i;
        
      
        for (i=0; i<10; i++); 
            
        double sum=0;
        for (i=0; i<n.length; i++) sum+=n[i]; 
        double mean=sum/10;
        System.out.println("Mittelwert : "+mean);
        
      
        sum=0;
        for (i=0; i<n.length; i++) sum+=(mean-n[i])*(mean-n[i]); 
           
        System.out.println("Standard-Abweichung : "
                 +Math.sqrt(sum/(n.length-1)));
        
      
        int m=10;
        int I[]=new int[m];
        int j;
        for (j=0; j<m; j++) I[j]=0; 
        for (i=0; i<n.length; i++) 
        {   j=(int)Math.floor(n[i]*m); 
       
            if (j>=m) j=m-1; 
            I[j]++;
        }

       
        for (j=0; j<m; j++) 
            System.out.println((j+1)+" : "+I[j]);
    }
}

so vorerst mal fertig. Funktioniert einwandfrei. Verbesserungvorschläge oder habe ich etwas unnötig gemacht?
 

Andi_CH

Top Contributor
• Schreiben Sie zunächst einen Standardkonstruktor, der 10 von Ihnen frei wählbare Zahlen in
dem Array speichert..

Frei wählbar!
Also entweder im Konstruktor von der Konsole einlesen oder im Hauptprogramm aus den Parametern oder von der Konsole lesen, in einer globalen statischen Variablen ablegen und im Konstruktor diese übernehmen (was aber extrem unschön ist!)
 
Zuletzt bearbeitet:

ARadauer

Top Contributor
Ist das für ein Studium? Und für welches Studium? Wenn es Informatik ist, würd ich mir Gedanken machen... wenns was anderes ist... naja...

Ich schreib dir ein paar Tipps dazu...
Java:
public class Statistik
{   public static void main (String args[])
    {  
      
        double n [];
        n = new double [10];
        n[0]=10; //das solltet ihr vom Benutzer einlesen lassen, da gibts mehre Möglichekiten
        n[1]=10;
        n[2]=10;
        n[3]=10;
        n[4]=10;
        n[5]=10;
        n[6]=10;
        n[7]=10;
        n[8]=10;
        n[9]=30;
        int i;
        
      
        for (i=0; i<10; i++); //hier kein Strichpunkt!
            
        double sum=0;
        for (i=0; i<n.length; i++) sum+=n[i]; //mach eine schleife nach der for! sonst ist es schwerer zu lseen
        double mean=sum/10;
        System.out.println("Mittelwert : "+mean);
        
      
        sum=0;
        for (i=0; i<n.length; i++) sum+=(mean-n[i])*(mean-n[i]); 
           
        System.out.println("Standard-Abweichung : "
                 +Math.sqrt(sum/(n.length-1)));
        
      
        int m=10;
        int I[]=new int[m];
        int j;
        for (j=0; j<m; j++) I[j]=0; 
        for (i=0; i<n.length; i++) //codeformatierung ist nicht optimal!
        {   j=(int)Math.floor(n[i]*m); 
       
            if (j>=m) j=m-1; 
            I[j]++;
        }

       
        for (j=0; j<m; j++) 
            System.out.println((j+1)+" : "+I[j]);
    }
}

so vorerst mal fertig. Funktioniert einwandfrei. Verbesserungvorschläge oder habe ich etwas unnötig gemacht?



generell würde ich mir angewöhnen meinen Code sauber zu formatieren und einzurücken... das hilft enorm

zb

Java:
for(int i = 0; i < 5; i++){
  machwas...
}
 

Landei

Top Contributor
Zum Initialisieren von Arrays kann man auch schreiben:

Java:
int[] array = new int[]{1,3,5,6,2,7};

//oder kürzer
int[] array = {1,3,5,6,2,7};
 

Garry

Mitglied
Ist das für ein Studium? Und für welches Studium? Wenn es Informatik ist, würd ich mir Gedanken machen... wenns was anderes ist... naja...

Ich schreib dir ein paar Tipps dazu...




generell würde ich mir angewöhnen meinen Code sauber zu formatieren und einzurücken... das hilft enorm

zb

Java:
for(int i = 0; i < 5; i++){
  machwas...
}

ist fürs Studium und nein kein Informatiker. Ist halt das sch...Bachelor, kann man nix machen
 

Andi_CH

Top Contributor
Bachelor gibts auch in Informatik ---- was denn nun?

Hast du meinen Hinweis mal versucht umzusetzten? Du musst ja den Array mit wählbaren Werten füllen....
Aber wenn du keinen hinweis gibst dass du konkret was versucht hast kommt von uns auch kaum Hilfe.
 

Garry

Mitglied
Java:
import java.util.Scanner;

public class Statistik
{
   
   static double n [];

    public static void main (String[] args)
    {
      Scanner eingabe = new Scanner (System.in);

      n= new double [10];
      double[] array = {0,1,3,5,6,2,7,8,9};
      
      System.out.print ("Geben Sie die erste Zahl ein: ");
      double n0 = eingabe.nextFloat();
      
      System.out.print ("Geben Sie die zweite Zahl ein: ");
      double n1 = eingabe.nextFloat();
      
      System.out.print ("Geben Sie die dritte Zahl ein: ");
      double n2 = eingabe.nextFloat();
      
      System.out.print ("Geben Sie die vierte Zahl ein: ");
      double n3 = eingabe.nextFloat();
      
      System.out.print ("Geben Sie die fuenfte Zahl ein: ");
      double n4 = eingabe.nextFloat();
      
      System.out.print ("Geben Sie die sechste Zahl ein: ");
      double n5 = eingabe.nextFloat();
      
      System.out.print ("Geben Sie die siebte Zahl ein: ");
      double n6 = eingabe.nextFloat();
      
      System.out.print ("Geben Sie die achte Zahl ein: ");
      double n7 = eingabe.nextFloat();
      
      System.out.print ("Geben Sie die neunte Zahl ein: ");
      double n8 = eingabe.nextFloat();
      
      System.out.print ("Geben Sie die zehnte Zahl ein: ");
      double n9 = eingabe.nextFloat();
      
      int i;
        
      for (i=0; i<10; i++); 
            
        double sum=0;
        for (i=0; i<n.length; i++) sum+=n[i]; 
        double mean=sum/10;;
                
                    System.out.println("Mittelwert: " +mean);
        
        
        sum=0;
      for (i=0; i<n.length; i++) sum+=(mean-n[i])*(mean-n[i]); 
           
                 System.out.println("Standard-Abweichung : "
                 +Math.sqrt(sum/(n.length-1)));
    }
}

habe es mal jetzt mit einer Konsole probiert. Ohne Array hats sehr gut funktioniert war jedoch sehr umständlich. Mit dieser Version kommt bei mir als Ergebnis 0.0 für Mittelwert und 0.0 für Standartabweichung raus.
 
S

SlaterB

Gast
wie kommst du dazu, das Programm mit zehn langen Eingaben zuzupflastern, nur weil das leicht zu kopieren ist?
ein schlechter Ratgeber,
besser wäre ein Test zunächst nur mit einer und dann zwei Zahlen, sparst du dir viel Mühe
[c]double n0 = eingabe.nextFloat();[/c]
->
[c]n[0] = eingabe.nextFloat();[/c]
usw. damit auch das Array befüllt ist, nicht beliebige andere Variablen


unten verwendest du manchmal n.length, an anderen Stellen doch wieder die Zahl 10 direkt
 

Garry

Mitglied
wie kommst du dazu, das Programm mit zehn langen Eingaben zuzupflastern, nur weil das leicht zu kopieren ist?
ein schlechter Ratgeber,
besser wäre ein Test zunächst nur mit einer und dann zwei Zahlen, sparst du dir viel Mühe
[c]double n0 = eingabe.nextFloat();[/c]
->
[c]n[0] = eingabe.nextFloat();[/c]
usw. damit auch das Array befüllt ist, nicht beliebige andere Variablen


unten verwendest du manchmal n.length, an anderen Stellen doch wieder die Zahl 10 direkt

Ich danke dir. Jetzt funktioniert das Programm super. Aufgabe erledigt! Lg
 

Neue Themen


Oben