alle teiler einer zahl ausgeben

Status
Nicht offen für weitere Antworten.

Yoshimitsu

Mitglied
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.

Code:
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.
 
ok, ich bin einen schritt weiter:

Code:
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 🙁
 
Der ';' hinter dem while war dein Feind :wink:
Code:
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]
 
aaach a%b hätt ich doch wissen müssen!


aber den hier: b++; kenn ich nicht 🙁
was bedutet das?
 
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
...
 
Naja, wie gesagt 10s Unterschied bei 50Milliarden!!! Durchlaeufen...
Ich seh da keinen grossen Unterschied
 
Code:
int i=0;
if(++i==1)
    System.out.println("ist das");
i=0;
if(i++==1)
    System.out.println("das gleiche?");
 
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 !
 
Code:
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]
 
Soviel zur genauigkeit dieser 'Profiling' methode :wink:
Code:
        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);
 
Wenn man eine solche Methode anwendet darf man übrigens keine System.outs WÄHREND der Messung machen.
Versuch mal das :wink:
Code:
         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 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:
 
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
 
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.
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Zurück
Oben