Announcement

Collapse
No announcement yet.

Frage und Problem bei Array

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Frage und Problem bei Array

    Habe folgenden Code geschrieben:

    Code:
    public class Main {
    
    	public static void main(String[] args) {
    	double temp = 0;
    	double[] finalpi = {0, 0, 0, 0};
    	double[] pi = {1, 0, 0, 0};
    	double[][] q =  {     
    					{1.0/3.0, 7.0/12.0, 1.0/12.0, 0}, 
    					{1.0/3.0, 0, 0, 2.0/3.0}, 
    					{0, 11.0/12.0, 1.0/12.0, 0}, 
    					{0, 1.0/4.0, 0, 3.0/4.0}    
    					}; 
    	
    	System.out.print("->Vektor Pi 1 ("+pi[0]+","+pi[1]+","+pi[2]+","+pi[3]+")");
    	//Start t2-t100
    	for(int t=1;t<100;t++)
    	{	
    	
    	for(int s=0;s<pi.length;s++)
    	{
    		for(int z=0;z<pi.length;z++)
    		{
    		   temp+=pi[z]*q[z][s];
    		   System.out.print("\n\n->"+pi[z]+" * "+q[z][s]+" = "+pi[z]*q[z][s]+"\n");
    		}
    		finalpi[s]=temp;
    		
    		
    		temp=0;
    	}
    	pi=finalpi;
    	
    	//Ausgabe:
    	System.out.print("\n\n->Vektor Pi "+(t+1)+" (");
    	for(int x=0;x<pi.length;x++)
    	{	
    		System.out.print(finalpi[x]);
    		System.out.print(",");		
    	}
    	System.out.print(")");
    	
    	}
    	
    	
    	}
    
    }

    Ausgabe sieht dann so aus:

    Code:
    ->Vektor Pi 1 (1.0,0.0,0.0,0.0)
    
    ->1.0 * 0.3333333333333333 = 0.3333333333333333
    
    
    ->0.0 * 0.3333333333333333 = 0.0
    
    
    ->0.0 * 0.0 = 0.0
    
    
    ->0.0 * 0.0 = 0.0
    
    
    ->1.0 * 0.5833333333333334 = 0.5833333333333334
    
    
    ->0.0 * 0.0 = 0.0
    
    
    ->0.0 * 0.9166666666666666 = 0.0
    
    
    ->0.0 * 0.25 = 0.0
    
    
    ->1.0 * 0.08333333333333333 = 0.08333333333333333
    
    
    ->0.0 * 0.0 = 0.0
    
    
    ->0.0 * 0.08333333333333333 = 0.0
    
    
    ->0.0 * 0.0 = 0.0
    
    
    ->1.0 * 0.0 = 0.0
    
    
    ->0.0 * 0.6666666666666666 = 0.0
    
    
    ->0.0 * 0.0 = 0.0
    
    
    ->0.0 * 0.75 = 0.0
    
    
    ->Vektor Pi 2 (0.3333333333333333,0.5833333333333334,0.08333333333333333,0.0,)
    
    ->0.3333333333333333 * 0.3333333333333333 = 0.1111111111111111
    
    
    ->0.5833333333333334 * 0.3333333333333333 = 0.19444444444444445
    
    
    ->0.08333333333333333 * 0.0 = 0.0
    
    
    ->0.0 * 0.0 = 0.0
    
    
    ->0.3055555555555556 * 0.5833333333333334 = 0.17824074074074076 <----???
    
    
    ->0.5833333333333334 * 0.0 = 0.0
    
    
    ->0.08333333333333333 * 0.9166666666666666 = 0.07638888888888888
    
    
    ->0.0 * 0.25 = 0.0
    
    
    ->0.3055555555555556 * 0.08333333333333333 = 0.025462962962962965
    
    
    ->0.25462962962962965 * 0.0 = 0.0
    
    
    ->0.08333333333333333 * 0.08333333333333333 = 0.006944444444444444
    
    
    ->0.0 * 0.0 = 0.0
    
    
    ->0.3055555555555556 * 0.0 = 0.0
    
    
    ->0.25462962962962965 * 0.6666666666666666 = 0.1697530864197531
    
    
    ->0.03240740740740741 * 0.0 = 0.0
    
    
    ->0.0 * 0.75 = 0.0

    Das programm soll eig nur die Matrix q mit dem vektor "pi" multiplizieren.
    Scheint bis "Pi2" (siehe ausgabe) zu klappen

    Aber dann um den Vektor Pi3 zu berechnen kommt dann die Zeile:

    >0.3055555555555556 * 0.5833333333333334 = 0.17824074074074076


    Meine Frage laute jetzt:

    Warum steht da jetz 0.305555 hab doch an der Adresse 0 in Vektor pi 0.3333333333333333...

    was ist da jetzt passiert?

  • #2
    debugge dein Programm durch; setze ggf. bedingte Breakpoints
    Christian

    Comment


    • #3
      naja das hab ich bereits gemacht.. komme aber immerwieder zu der gleichen komischen Frage warum auf einmal da ein Wert an der speichertstelle im array steht der eig garnicht stehen sollte.

      Hab mal nen bissl gegoogelt und was gefunden das bei dem Speichermanagement bei arrays im Heap abgespeichert wird und dadurch solche anomalien stehen können.
      Naja hab davon nicht so wirklich die Ahnungen warum das so ist und wie man es hätte besser machen können, daher wollt ich euch mal um rat fragen.

      Comment


      • #4
        Aber dann um den Vektor Pi3 zu berechnen kommt dann die Zeile:
        Laut deiner Ausgabe ist das Vektor 2

        Und mein Debugger zeigt korrekt 0.3055555555555556 in pi[0] an
        Christian

        Comment


        • #5
          Mit

          pi=finalpi;

          wird keine Kopie erzeugt,sondern beide verweisen auf die Gleiche Referenz....wenn das beabsichtigt ist...
          Christian

          Comment


          • #6
            nein, also berechnungen fanden für p3 statt das stimmte schon..

            aber habs nun doch hinbekommen ... Problem war das es nicht beabsichtigt war auf die gleiche referenz zu verweisen

            for(int p=0;p<pi.length;p++)
            pi[p]=finalpi[p];

            hats nun wieder gradegebogen... läuft nun alles wie es sollte

            danke

            Comment

            Working...
            X