[Java] Addition von Unterschiedlich langen Arrays

Dieses Thema im Forum "Programmierung & Entwicklung" wurde erstellt von sTeRe0|tYp3, 3. Juni 2010 .

  1. 3. Juni 2010
    Addition von Unterschiedlich langen Arrays

    hallo, hab da nochmal ne frage zu folgendem.

    also ich hab erst folgendes programm geschrieben

    Code:
    public class VektorWork
    {
     public static void main(String[] args)
     {
     int[] a = {12,-2,23,4,-15};
     int[] b = {8,1,-7,2,23};
    
     int[] result = VektorWork.addVektor(a,b);
     for (int j=0; j<result.length; j++)
     System.out.println(result[j]);
     }
    
    
     public static int[] addVektor(int[] a, int[] b)
     {
     int [] vektor = new int[a.length];
     for(int i=0; i<a.length; i++)
     {
     int wert_a=a[i];
     int wert_b=b[i];
     vektor[i]=wert_a+wert_b; 
     }
     return vektor;
     }
    
    }
    das geht soweit auch. nun will ich das ganze so erweitern um unterschiedlich lange arrays addieren zu können. dazu hab ich ne if abfrage gemacht, zunächst mit 2 fällen. a=b und a>b ... nur leider bekomm ich nun immer die meldung "missing return vektor statement".... nur ich weiß echt nicht wo, oder was ich an welcher stelle falsch geschrieben habe. kann mal jemand rüberschauen und was zu sagen wenn er den fehler sieht?

    bewertung ist klar

    Code:
    public class VektorMultWork
    {
     public static void main(String[] args)
     {
     int[] a = {12 ,-2 ,23 ,4 ,-15};
     int[] b = {8 ,1 ,-7 ,2 };//,23 ,8 ,9 ,11 ,-89};
    
     int[] result = VektorMultWork.addVektor(a,b);
     for (int j=0; j<result.length; j++)
     System.out.println(result[j]);
     }
    
    
     public static int[] addVektor(int[] a, int[] b)
     {
     if(a.length==b.length)
     {
     int [] vektor = new int[a.length];
     for(int i=0; i<a.length; i++)
     {
     int wert_a=a[i];
     int wert_b=b[i];
     vektor[i]=wert_a+wert_b; 
     }
     return vektor;
     
     }
    
     if(a.length>b.length)
     {
     int [] neues_b = new int[a.length];
     for(int i=0;i<b.length;i++)
     {
     neues_b[i]=b[i];
     }
    
     for(int i=b.length;i<a.length;i++)
     {
     neues_b[i]=0;
     }
    
     int [] vektor = new int[a.length];
     for(int i=0; i<a.length; i++)
     {
     int wert_a=a[i];
     int wert_b=neues_b[i];
     vektor[i]=wert_a+wert_b; 
     }
     return vektor;
     } 
     }
    
    }
     
  2. 3. Juni 2010
    AW: Addition von Unterschiedlich langen Arrays

    Hallo,

    bei Dir fehlt, die die Meldung schon sagt, einfach ein 'return ...'-Statement.
    Mit Deinen beiden if-Bloecken fängst Du nicht alle moeglichen Werte ab -> Was ist, wenn a.length < b.length ?

    Müssen es wirklich Arrays sein, die Du addierst?
     
  3. 3. Juni 2010
    AW: Addition von Unterschiedlich langen Arrays

    japp, es müssen arrays sein

    aber danke für den tipp. ich werd einfach das andere noch dazuschreiben und gucken was dann passiert.
     
  4. 3. Juni 2010
    AW: Addition von Unterschiedlich langen Arrays

    Hier mal ein Beispiel, wie ich es auf die schnelle programmieren würde. Habe hier allerdings ArrayList verwendet, da diese flexibler und einfacher handbar sind gegenüber Arrays.

    PHP:
    import java . util . ArrayList ;
    import java . util . Random ;


    public class 
    MultiAdd  {

        public static 
    void main  ( String []  args ) {
            new 
    MultiAdd ();
        }
        
        public 
    MultiAdd  () {
            
            

            
    Random rand  = new  Random ();

            
    // list #1
            
    ArrayList < Integer list1  = new  ArrayList < Integer >();
            for (
    int i  0 rand . nextInt ( 15 );  i ++) {
                
    list1 . add ( rand . nextInt ( 30 ));
            }
            
            
    // list #2
            
    ArrayList < Integer list2  = new  ArrayList < Integer >();
            for (
    int i  0 rand . nextInt ( 15 );  i ++) {
                
    list2 . add ( rand . nextInt ( 30 ));
            }
            
            
    ArrayList < Integer result  this . add ( list1 list2 );
            
            
    System . out . println ( "-- list 1 --" );
            
    System . out . println ( list1 );
            
    System . out . println ( "-- list 2 --" );
            
    System . out . println ( list2 );
            
    System . out . println ( "-- result --" );
            
    System . out . println ( result );
            
            
    System .exit( 0 );
        }
        
        public 
    ArrayList < Integer add  ( ArrayList < Integer list1 ArrayList < Integer list2 ) {
            if (
    list1 . size () >  list2 . size ()) {
                return 
    this . _add ( list1 list2 );
            } else {
                return 
    this . _add ( list2 list1 );
            }
        }
        
        private 
    ArrayList < Integer _add  ( ArrayList < Integer list1 ArrayList < Integer list2 ) {
            
            
    ArrayList < Integer result  = new  ArrayList < Integer >();
            
            
    int value1 value2 ;
            for (
    Integer i  0 list1 . size ();  i ++) {
                
    value1  list1 . get ( i );
                
    value2  0 ;
                
                try {
                    
    value2  list2 . get ( i );
                }catch (
    IndexOutOfBoundsException e ) {
                    

                
    }
                
                
    result . add ( value1  value2 );
            }
            
            return 
    result ;
        }
    }
    Ich habe die private Methode _add erstellt, weil die Addition immer gleich abläuft und nur die Listen vertauscht werden; je nachdem, welche Liste mehr Elemente beinhaltet.
     
  5. 3. Juni 2010
    AW: Addition von Unterschiedlich langen Arrays

    Ich habs so gemacht:

    PHP:
    public class  VektorMultWork  {
        public static 
    void main  ( String []  args ) {
            
    int []  = { 12 , - 2 23 4 , - 15 };
            
    int []  = { 8 1 , - 7 2 23 8 9 11 , - 89 };
     
            
    int []  result  VektorMultWork . addVektor ( a b );
            for (
    int j  0 result . length j ++) {
                
    System . out . println ( result [ j ]);
            }
        }
     
        public static 
    int []  addVektor ( int []  a int []  b ) {
            
    int len  a . length  >=  b . length  a . length  b . length ;
            
    int s_len  a . length  <=  b . length  a . length  b . length ;
     
            
    int []  res  = new  int [ len ];
            for (
    int i  0 s_len i ++) {
                
    res [ i ] =  a [ i ] +  b [ i ];
            }
     
            if (
    len  !=  s_len ) {
                
    int []  tmp  a . length  b . length  b ;
                for (
    int i  = ( len  s_len ) +  1 len i ++) {
                    
    res [ i ] =  tmp [ i ];
                }
            }
            return 
    res ;
        }
    }
    len beinhaltet die Länge des größeren Vektors, s_len beinhaltet die Länge des kleineren Vektors. Dann werden alle Element (bis s_len) von beiden Vektoren addiert (bis dahin sind sie ja noch identisch von der Länge).
    Danach schaue ich, ob len != s_len, weil dann ja noch mehr Elemente addiert werden müssen. In einem temporären Array speicehr ich dann das größere Array von beiden und gehe ab dem "(len- s_len) + 1"-ten Element bis zum Ende des größeren Vektors und füge die Zaheln zu dem res Vektor. Wenn du noch fragen dazu hast, dann gogogo

    greez
     
  6. 4. Juni 2010
    AW: Addition von Unterschiedlich langen Arrays

    thx an euch beide für die mühe mit den programmen

    hab mich an deinen tipp gehalten Sn0wm4n
    hab meinen code jetzt ergänzt zu diesem:

    Code:
    public class VektorMultWork
    {
     public static void main(String[] args)
     {
     int[] a = {12 ,-2 ,23 ,4 ,-15};
     int[] b = {8 ,1 ,-7 ,2 ,23 ,8 ,9 ,11 ,-89};
    
     int[] result = VektorMultWork.addVektor(a,b);
     for (int j=0; j<result.length; j++)
     System.out.println(result[j]);
     }
    
    
     public static int[] addVektor(int[] a, int[] b)
     {
     if(a.length==b.length)
     {
     int [] vektor = new int[a.length];
     for(int i=0; i<a.length; i++)
     {
     int wert_a=a[i];
     int wert_b=b[i];
     vektor[i]=wert_a+wert_b; 
     }
     return vektor;
     
     }
    
     if(a.length>b.length)
     {
     int [] neues_b = new int[a.length];
     for(int i=0;i<b.length;i++)
     {
     neues_b[i]=b[i];
     }
    
     for(int i=b.length;i<a.length;i++)
     {
     neues_b[i]=0;
     }
    
     int [] vektor = new int[a.length];
     for(int i=0; i<a.length; i++)
     {
     int wert_a=a[i];
     int wert_b=neues_b[i];
     vektor[i]=wert_a+wert_b; 
     }
     return vektor;
     }
    
     else
     {
     int [] neues_a = new int[b.length];
     for(int i=0;i<a.length;i++)
     {
     neues_a[i]=a[i];
     }
    
     for(int i=a.length;i<b.length;i++)
     {
     neues_a[i]=0;
     }
    
     int [] vektor = new int[b.length];
     for(int i=0; i<b.length; i++)
     {
     int wert_a=neues_a[i];
     int wert_b=b[i];
     vektor[i]=wert_a+wert_b; 
     }
     return vektor;
     } 
    
     }
    
    }
    der ist zwar um einiges länger als der von euch, aber den hab ich zumindest ganz alleine hinbekommen

    bewertungen sind raus
     
  7. Video Script

    Videos zum Themenbereich

    * gefundene Videos auf YouTube, anhand der Überschrift.