# alle teiler einer zahl ausgeben



## Yoshimitsu (20. Apr 2005)

hallo zusammen, wie könnte es anders sein, ich habe ein problem.

Also die aufgabe sieht so aus, ich starte mein program, mit einer belibigen zahl als argument, und das program soll mir alle (ganzzahligen) teiler dieser zahl ausgeben.

dazu gillt es zu beachten, dass ich erst 8 stunden unterrricht hatte, und somit mein "wortschatz" noch etwas eingeschränkt ist.


```
public class alleteilereinerzahl {

public static void main(String[] args) 
	{
		
		int a = Integer.parseInt(args[0]);
		int b = (0);
		
		while (b < (a/2));
		{
		b=(b + 1);
		
		if ((b * b)== a);
		{
		System.out.println(b);
		}
	}
		}}
```


nun, für meine logik sollte das eingentlich funktionieren, tut es aber nicht.

das proggie gibt keine zahl aus,  und bleibt dazu noch in der while schleife hängen. 
system auslastung 100%  :autsch: 


wäre froh, wenn ihr mir einen tip geben könntet.


----------



## Yoshimitsu (20. Apr 2005)

ok, ich bin einen schritt weiter:


```
public class alleteilereinerzahl {

public static void main(String[] args) 
	{
		
		int a = Integer.parseInt(args[0]);
		int b = (0);
		
		while (b < (a/2))
		{
		b=(b + 1);
		
		if ((b * b)== a)
		{
		System.out.println(b);
		}
	}
		}}
```


das program läuft mehr oder weniger sauber durch, gibt jedoch immernoch keine zahlen aus


----------



## Wildcard (20. Apr 2005)

Der ';' hinter dem while war dein Feind  :wink: 

```
public class alleteilereinerzahl
{ 

    public static void main(String[] args) 
    { 
          int a = Integer.parseInt(args[0]); 
          int b = 0; 
       
          while (b < (a/2)) 
          { 
              b++; 
       
              if ((a%b==0) 
              { 
                  System.out.println(b); 
              } 
           } 
    }
}
```
[edit]2l8[/edit]
[edit2]


			
				Roar hat gesagt.:
			
		

> und hinter dem if auch
> hat er doch berichtigt


Hab ich eben abgschickt bevor ich das neue posting gesehen hab   :wink:  [/edit2]


----------



## Roar (20. Apr 2005)

und hinter dem if auch :bae:
hat er doch berichtigt


----------



## Guest (20. Apr 2005)

aaach  a%b  hätt ich doch wissen müssen!


aber den hier:  b++;   kenn ich nicht 
was bedutet das?


----------



## mic_checker (20. Apr 2005)

Inkrement Operator

Erhöht Wert um 1.


----------



## Akimor (20. Apr 2005)

ist das selbe wie ++b...
nur dass ++b bei 50 Milliarden Durchlaeufen 10 sec laenger braucht wie b++ bei gleicher Anzahl   
Man kann auch 
wert1+=wert2 machen, das entspricht
wert1=wert1+wert2
...


----------



## Wildcard (20. Apr 2005)

Akimor hat gesagt.:
			
		

> ist das selbe wie ++b...


Ist es nicht, zumindest nicht immer...


----------



## Akimor (21. Apr 2005)

Naja, wie gesagt 10s Unterschied bei 50Milliarden!!! Durchlaeufen...
Ich seh da keinen grossen Unterschied


----------



## Wildcard (21. Apr 2005)

```
int i=0;
if(++i==1)
    System.out.println("ist das");
i=0;
if(i++==1)
    System.out.println("das gleiche?");
```


----------



## Akimor (21. Apr 2005)

ok, dann wird wert++ erstmal gepuffert
und nicht direkt in den Speicherbereich geschrieben oder wie?


----------



## mic_checker (21. Apr 2005)

Beim ersten Beispiel wird i erst inkrementiert, der neue Wert mit 1 verglichen, im  zweiten Beispiel mit 1 verglichen, dann inkrementiert.

Du musst also diese Seiteneffekte bei den Zuweisungen etc. beachten !


----------



## Akimor (21. Apr 2005)

Ah, gut dann weiss ich das nun auch mal...


----------



## Wildcard (21. Apr 2005)

Akimor hat gesagt.:
			
		

> nur dass ++b bei 50 Milliarden Durchlaeufen 10 sec laenger braucht wie b++ bei gleicher Anzahl


BTW das halte ich für Blödsinn... Wie kommst du zu diesem Wert?


----------



## Akimor (21. Apr 2005)

```
import java.util.*;

public class temp{
  public static void main(String[] args){
    int i=5;
    long a=System.currentTimeMillis();
    for(int y=0;y<50;y++){
      System.out.print(y);
      for(long z=0;z<1000000000;z++){i++;}
    }
    long b=System.currentTimeMillis();
    System.out.print("\n");
    long c=System.currentTimeMillis();
    for(int y=0;y<50;y++){
      System.out.print(y);
      for(long z=0;z<1000000000;z++){++i;}
    }
    long d=System.currentTimeMillis();
    System.out.print("\n\nWert : "+i+"\n");
    System.out.print("wert++ : "+(double)(b-a)/1000+"\n");
    System.out.print("++wert : "+(double)(d-c)/1000+"\n");
  }
}
```
Bei mir macht das ca. 10sec Unterschied
[/quote]


----------



## Wildcard (21. Apr 2005)

Soviel zur genauigkeit dieser 'Profiling' methode  :wink: 

```
long time = System.currentTimeMillis();
         int z=0;
         for(int i=0;i<Integer.MAX_VALUE;i++){z++;}
         System.out.println(System.currentTimeMillis()-time);
         time =System.currentTimeMillis();
         
         for(int i=0;i<Integer.MAX_VALUE;++i){++z;}
         System.out.println(System.currentTimeMillis()-time);
```


----------



## Wildcard (21. Apr 2005)

Wenn man eine solche Methode anwendet darf man übrigens keine System.outs WÄHREND der Messung machen.
Versuch mal das  :wink: 

```
int i=5; 
         long a=System.currentTimeMillis(); 
         for(int y=0;y<50;y++){ 
           //System.out.print(y); 
           for(long z=0;z<100000000;z++){i++;} 
         } 
         long b=System.currentTimeMillis(); 
         //System.out.print("\n"); 
         long c=System.currentTimeMillis(); 
         for(int y=0;y<50;y++){ 
           //System.out.print(y); 
           for(long z=0;z<100000000;z++){++i;} 
         } 
         long d=System.currentTimeMillis(); 
         System.out.print("\n\nWert : "+i+"\n"); 
         System.out.print("wert++ : "+(double)(b-a)/1000+"\n"); 
         System.out.print("++wert : "+(double)(d-c)/1000+"\n");
```


----------



## Akimor (21. Apr 2005)

Da ist nun dann immer wert++ um 30s langsammer...
auch bei deinem Prog ist wert++ langsammer


----------



## Wildcard (21. Apr 2005)

Dann vertausch das ganze mal und wunder dich  :lol:


----------



## Yoshimitsu (21. Apr 2005)

wow, da hab ich ja was vom zaun gebrochen 


auf jeden fall vielen dank leute


----------



## bygones (21. Apr 2005)

Akimor hat gesagt.:
			
		

> Da ist nun dann immer wert++ um 30s langsammer...
> auch bei deinem Prog ist wert++ langsammer


ach wie liebe ich doch diese Benchmarks die allgemeingültig stimmen  :applaus:


----------



## Gast (21. Apr 2005)

nicht ganz uninteressant, hab's auch mal ausprobiert (allerdings ohne die y-schleife). bei mir war das erg allerdings genau anders herum:
Wert   : 2000000005
wert++ : 7.656
++wert : 6.438


----------



## Wildcard (21. Apr 2005)

> nicht ganz uninteressant, hab's auch mal ausprobiert (allerdings ohne die y-schleife). bei mir war das erg allerdings genau anders herum:


Völlig uninteressant.
Vertausch mal die Reihenfolge, also geh zuerst die ++wert-Schleife und dann die wert++-Schleife durch,
dann siehst du wie sinnlos solche tests sind.


----------



## Gast (21. Apr 2005)

allerdings...
ich vergesse es hiermit wieder alles!


----------

