Zahl ist Ganzzahl?

VBKenner

Mitglied
Hallo!
Folgende Aufgabe: In die Konsole soll aufsteigend bis 50 in jede Zeile eine Zahl geschrieben werden. Allerdings soll bei Zahlen die sich durch 3 teilen lassen und dabei eine Ganzzahl ergeben statt der grade aktuellen Zahl ein "foo" geschrieben werden, bei 5 ein "bar" und bei 7 ein "baz".
Beispiel: Bei 6 würde "foo" geschrieben werden, bei 7 "baz" und bei 15 "foo bar".

Erst habe ich versucht das ganze mit Switch zu lösen, habe dann aber eher an 3 If-Schleifen gedacht: In der ersten wird abgefragt ob die aktuelle Zahl / 3 eine Ganzzahl ist. Wenn ja dann "foo" in eine Variable schreiben. In den nächsten schleifen das selbe mit der Ausnahme das das Wort an die Varibale angehängt wird, denn es müssen ja 2 Wörter wie bei 15 geschrieben werden. An ende würde die Variable dann mit "" gelert werden.

So weit so gut. Die While Schleife die ich benutze benutzt die Variable i (integer) und auch wenn ich sie durch 3 teile wird die automatisch gerundet, selbst wenn ich folgende Anweisung verwende:
Code:
strZahl = "" + i/3;
:/

Eigentlich müsste es doch möglich sein die Zahl zu checken ob diese Ganzzahl ist oder nicht.

Wenn ich jetzt i als float deklariere dann krieg ich trotzdem 5.0 für 15 ( 15/3) raus, also ist mein 2. Lösungsansatz auch unbrauchbar, ich wollte checken ob sich ein Punkt in dem String befindet (Deswegen hab ich den Wert auch in String umgewandelt)

---
Jetzt überlege ich grade ob man nicht feststellen könnte wieviele Zahlen nach dem Punkt kommen, falls 1 Zahl und diese ist eine 0 dann ist es eine Ganzzahl und es wird dann das Wort statt die Zahl geschrieben.

Aber wie?^^
---

mein aktueller code ist grade der hier :/
Code:
   public class FooBarBaz {
      public static void main (String[] args) {
         float i = 0;
         String strZahl;
         while (i < 50) {
            i++;
            strZahl = "" + i/3;
            int index = strZahl.indexOf(".");
            System.out.println(strZahl + " Punkt an Stelle: " + index);
         }
      }
   }
 
Zuletzt bearbeitet:
1. float 5.0 ergibt natürlich int 5 (ist halt nur ein anderes Format)

2. Wenn Du mit Modula (%) arbeitest, bekommst Du schnell raus, was durch 3 teilbar ist:
Code:
int i = x % 3;
Modula liefert nämlich den Rest, der nicht aufgeht (also: 5 / 3 = 1, aber 5 % 3 = 2).
 
2. Wenn Du mit Modula (%) arbeitest, bekommst Du schnell raus, was durch 3 teilbar ist:
Code:
  int i = x % 3;
Modula liefert nämlich den Rest, der nicht aufgeht (also: 5 / 3 = 1, aber 5 % 3 = 2).
danke, ich bin grade leicht verwirrt, da ich erst seit wenigen Tagen mit Java herumzuspielen begonnen habe und von VB6 komme: Ich wollte nun mit der If Schleife abfragen ob i (bei float) 0.0 ist. im JavaBuch steht "Zu beachten ist, dass der Testaudruck in der Schleife vom Typ boolean sein muss." Wie bitte soll ich das dan abfragen, ich dachte an:
Code:
if (i=0.0) {
  //...
  }
 
Zuletzt bearbeitet:
Code:
i = 0.0
ist aber eine Zuweisung und kein boolscher Ausdruck.

Versuchs mal mit
Code:
i == 0.0
.

Die modulo Variante ist aber IMHO die elegantere.

Code:
if( x % 2 == 0)
 
Hehe, das mit den == ist gemein :p
So sieht mein Source jetzt aus:
Code:
public class FooBarBaz {
   public static void main (String[] args) {
      int i = 0; //hab das mal geändert
      while (i < 50) {
         i++;
         if (i%3==0.0) {
            System.out.println("bar");
         }
         if (i%5==0.0) {
            System.out.println("foo");
         }
         if (i%7==0.0) {
            System.out.println("baz");
         }
      }
   }
}

jetzt fehlt mir nur noch eine elegante lösung wie ich wenn nichts davon zustrifft einfach die Zahl schreiben lasse :/ schaut schlecht aus, müsste ich in jeder if schleife eine else reinschreiben mit einer if schleife die einen boolischen wert abfragt ob schon mal die normal zahl geschrieben wurde. gibts eine elegantere lösung, der source sieht grad so sauber aus :D
 
Code:
public class FooBarBaz {
   public static void main (String[] args) {
      int i = 0; //hab das mal geändert
      boolean foobar = false;
      while (i < 50) {
         i++;
         foobar = false;
         if (i%3==0.0) {
            System.out.print(" bar "); foobar = true;
         }
         if (i%5==0.0) {
            System.out.print(" foo "); foobar = true;
         }
         if (i%7==0.0) {
            System.out.print(" baz "); foobar = true;
         }
         if (foobar) {
            System.out.println("");
         } else {
            System.out.println(i);
         }
      }
   }
}
.. mal ne "billige" Variante. ;)

Gruß
.
 
So, hier mal mein endgültiger code (Vielen Dank euch)):
Code:
  public class FooBarBaz {
     public stativ void main (String[] args) {
  	  int i = 0;
  	  String Temp;
  	  While (i < 50) {
  		 i++;
  		 boolean sWord = false;
  		 Temp = "";
  		 if (i%3==0.0) {
  			Temp += "Foo"; sWord = true;
  		 }
  		 if (i%5==0.0) {
   			Temp += "Bar"; sWord = true;
   		 }
  		 if (i%7==0.0) {
   			Temp += "Baz"; sWord = true;
   		 }
  		 if sWord) {
  			System.out.println(Temp);
  		 } else {
  			System.out.println(i);
  		 }
  	  }
     }
  }

jetzt hab ich nur noch das Problem das zwangsweise immer ein Blank vor den Ausgaben geschrieben werden muss, oder möchte das jmd fixen? :p
 
Zuletzt bearbeitet:
kürzer wär's so:

Code:
System.out.println(((i%3==0.0)? "Foo":((i%5==0.0)? "Bar": ((i%7==0.0)? "Baz": ""+i))));
...hoffentlich stimmt die Klammeranzahl :p
 
Zurück