Zahl in Ziffern zerlegen

Jo.Mo.

Aktives Mitglied
...ich sitze gerade an einer Aufgabe, bei der man 2 Methoden schreiben soll, die dann in einer Klasse getestet werden sollen. Eine Methode habe ich bereits fertig, nur an der anderen haperts. Hier das Problem:

Die Methode soll eine natürliche Zahl testen (also nehme ich mal int als optimal hin) ob alle ihre Ziffern gleich 1 sind. Übergabe dieser Zahl erfolgt als Parameter und rückgabe als boolean, also true/false.


Daneben stellt sich mir noch die Frage (da auch die andere Methode ihren Wert als Parameter übergeben bekommen soll) wie ich da bei Programmstart eine Methodenauswahl realisiere.

Hier mal die 2 Methode und den Rahmen (unfertig, wie erwähnt):
Java:
public class SimpleMethoden {


    // Befehle

    public class nurEinsen() {



    }

    public class flaecheNachUmfang(double flaeche) {

        double r, u;
        r = Math.sqrt(flaeche / Math.PI);
        u = 2 * Math.PI * r;
        return u;
    }


    public static void main (String args[]){
    
      int zahl;
      double flaeche;
      System.out.println("Eingabe der Kreisfläche: ");
      flaeche = in.nextDouble();

      if (flaeche <= 0){
        	System.out.println("Berechnung nicht moeglich, bitte einen Wert > Null eingeben !");
      else

      }
    }  
}

...der main Teil ist natürlich so nicht richtig, ich hatte die Wertübergabe als Parameter überlesen... :(
 

eRaaaa

Top Contributor
Gibt mehrere Möglichkeiten !

- mathematisch %10 & / 10
- in einen String umwandeln und mit charAt prüfen
- Regex
- .....

deine Methodensignatur stimmt auch noch nicht!
 

Jo.Mo.

Aktives Mitglied
...ja, das erste finde ich zuviel Gewurschtel, auch wenn das mittels String nicht viel kürzer ist, sitz ich da grad dran, poste es dann gleich mal...
 

Jo.Mo.

Aktives Mitglied
...so, die Richtung müsste doch stimmen, jetzt überleg ich gerad wie ich möglichst einfach alle Ziffern gegen 1 vergleiche... (so wie es ist gehts ja leider nicht...)

Java:
public class SimpleMethoden {


    // Befehle

    public boolean nurEinsen(int zahl) {
          
        int i;
        int j = 0;
        string str = Integer.toString (i);
        int [] ia = new int [str.length()];
        for (char c : str.toCharArray()){
        	ia [j++] = Character.getNumericValue (c);
        }   
        if (c == 1){
           	return true;
        }	
        else{
        	return false;
        }

    }

    public double flaecheNachUmfang(double flaeche) {

        double r, u;
        r = Math.sqrt(flaeche / Math.PI);
        u = 2 * Math.PI * r;
        return u;
    }


    public static void main (String args[]){

      int zahl;
      double flaeche;
      System.out.println("Eingabe der Kreisfläche: ");
      flaeche = in.nextDouble();

      if (flaeche <= 0){
        	System.out.println("Berechnung nicht moeglich, bitte einen Wert > Null eingeben !");
      else

      }
    }
}

...achso, was ist denn bei der Sig falsch...?
 

eRaaaa

Top Contributor
Naja, Eigeninitiative war ja da (und steht eh schon tausendfach hier im Forum) :oops:

Java:
	public boolean allOnes(int i) {
		while (i != 0) {
			if (i % 10 != 1) {
				return false;
			}
			i /= 10;
		}
		return true;
	}

	public boolean allOnes2(int i) {
		String s = String.valueOf(i);
		for (int j = 0; j < s.length(); j++) {
			if (s.charAt(j) != '1') {
				return false;
			}
		}
		return true;
	}

	public boolean allOnes3(int i) {
		return String.valueOf(i).matches("1+");
	}

suche dir ne` Variante aus :)

Finde eig. nicht dass das Erste viel "Gewurschtel" ist, jedenfalls ist es weniger als bei dir *g* Verstehe nicht was das int-Array, Integer.toString und char-Array da sollen. Nur char-Array, drüber iterieren und gucken obs '1' ist sollte doch genügen(wäre dann ca. das was ich bei Nr.2 gemacht habe)

...achso, was ist denn bei der Sig falsch...?

jetzt nichts mehr :toll: (hatte mich oben verguckt! Du hattest ja noch gar keine Methode deklariert ;>)
 

Jo.Mo.

Aktives Mitglied
...danke, bin jetzt nochmal drübergegangen, jetzt brauch ich nur noch einen Tip wie ich das mit der Parameterübergabe bewerkstellige - es geht da mehr um eine Verständnissache, da für beide Aufgaben der Wert als Parameter übergeben werden soll - vermutlich soll gar keine Auswahl zw. den Methoden erfolgen, sondern beide für den jew. Parameter durchlaufen werden.Problem ist nur, das eine Aufgabe double verwendet, die andere Integer - mir fällt jetzt nur eine, den Parameter in der jew. Methode jeweils in den jew. Datentyp umzuwandeln, aber ob das so babsichtigt ist... :(

Bei der Kreisflächenberechnung soll der Rückgabewert Auskunft darüber geben, ob die Berechnung erfolgreich war - da habe ich jetzt einfach eine Schleife eingebaut (für neg. Werte liefert er die Entsprechende aussage, - ist das so O.K.?

Java:
public class SimpleMethoden {


    // Befehle
    public boolean nurEinsen(args[]) {

        String s = String.valueOf(args[]);
        for (int j = 0; j < s.length(); j++) {
            if (s.charAt(j) != '1') {
                return false;
            }
        }
        return true;
    }


    public double flaecheNachUmfang(args[]) {

        double flaeche;
        flaeche = Double.parseDouble(args[]);
        if (flaeche >= 0){
            double r, u;
            r = Math.sqrt(flaeche / Math.PI);
            u = 2 * Math.PI * r;
            return u;
        }
        else {
        	System.out.println("Negativert Wert, keine berechnung möglich");
        }
    }


    public static void main (String args[]){

      //int zahl;
      //double flaeche;

      //flaeche = in.nextDouble();

      System.out.println("Die Kreisfläche betraegt:");
      System.out.println(" " +u+ "Laengeneinheiten.");

      //for (flaeche <= 0){
        	System.out.println("Berechnung nicht moeglich, bitte einen Wert > Null eingeben !");

      //}

    }

}

...irgendwo hängts noch, er erzählt mir bei beiden Methoden was von <identifier> expected und .class expected bei der Parameterübergabe, was habe ich denn da schon wieder vergessen...?
 
Zuletzt bearbeitet:

eRaaaa

Top Contributor
...irgendwo hängts noch, er erzählt mir bei beiden Methoden was von <identifier> expected und .class expected bei der Parameterübergabe, was habe ich denn da schon wieder vergessen...?
Hö, was haste denn da jetzt gemacht? Hattest es doch vorher schon richtig ?! Vergleiche
Code:
public boolean nurEinsen([B]args[][/B])
mit
Code:
public boolean nurEinsen([B]int zahl[/B])
....
 

Jo.Mo.

Aktives Mitglied
...ja, aber die Werteabfrage soll ja nicht im Programm erfolgen (was auch zu schön und einfach wäre, da hätte ich es dann ja so lassen können) sondern per Parameterübergabe, also dachte ich das ich jew. gleich die enstprechenden parameter übergebe, also args.

Ich habe jetzt folgendes geändert:

Java:
String s = String.valueOf(args[0]);
flaeche = Double.parseDouble(args[0]);

...dadurch fällt zumindest mal der Fehler .class expected weg. Für

Java:
public boolean nurEinsen(args[]) {
public double flaecheNachUmfang(args[]) {

liefert es aber aber immer noch <identifier> expected - nur, ich weiss nicht was da nicht passt... ;(
 

Jo.Mo.

Aktives Mitglied
...vielleicht bin ich zu doof das zu umschreiben, ich poste mal den Aufgabentext:

Schreiben Sie eine Klasse SimpleMethoden und implementieren Sie die folgenden statischen
Methoden:
• Eine Methode nurEinsen, die von einer natürlichen Zahl bestimmt, ob alle ihre Ziffern gleich 1
sind. Die natürliche Zahl wird als Parameter übergeben. Der Rückgabewert soll den booleschen
Wert true für die wahre Aussage, sonst false liefern.
• Eine Methode flaecheNachUmfang, die den Kreisumfang berechnet, wenn die Fläche als
Parameter übergeben wird. Der Rückgabewert soll eine Auskunft darüber geben, ob eine
Berechnung erfolgreich war. Für negative Parameter ist die Berechnung z. B. nicht möglich. Das
Ergebnis der Berechnung ist über die Parameterliste bereit zustellen. Falls die Berechnung nicht
möglich ist, ist das Ergebnis mit einem Default-Wert zu belegen.
Ergänzen Sie die Klasse um eine main-Methode und testen Sie die implementierten Methoden.

...die Methoden sollten ja so passen, nur so wie ich das verstehe, haue ich bei methodenaufruf einfach einen Parameter rein (der einfachheit halber sag ich mal "5"), und der wird bei beiden Methoden eingesetzt. Je nachdem was man einsetzt bekommt man dann eine Ausgabe True oder false (ich kann in der Aufgabenstellung nirgendwo erkennen das das Ergebnis für die andere Methode eine Rolle spielt) sowie für die andere Methode Berechnung oder Rückgabe eines Default-wertes (ich nehme der einfachheit halber 1).

So siehts jetzt aus, und ich bin irgendwie mit meinem Latein am Ende... ;(

Java:
public class SimpleMethoden {


    // Befehle
    public boolean nurEinsen(args[]) {

        String s = String.valueOf(args[0]); //Umwandlung Parameter in String
        for (int j = 0; j < s.length(); j++) {
            if (s.charAt(j) != '1') { //pruefen des jew. char ob nicht 1
                return false;
            }
        }
        return true;
    }


    public double flaecheNachUmfang(args[]) {

        double flaeche;
        flaeche = Double.parseDouble(args[0]); //Umwandlung des Parameters in Double
        if (flaeche >= 0){
            double r, u;
            r = Math.sqrt(flaeche / Math.PI); //Berechnung Radius
            u = 2 * Math.PI * r;              //Berechnung Kreisumfang
            return u;
        }
        else {
        	return 1; //Rueckgabe eines default-Wertes, hier 1
        	System.out.println("Negativert Wert, keine berechnung möglich");
        }
    }


    public static void main (String args[]) {


      if(args.length>0){ //pruefen ob Parameter groesser 0
      //int zahl;
      //double flaeche;

      //flaeche = in.nextDouble();

      System.out.println("Die Kreisfläche betraegt:");
      System.out.println(" " +u+ "Laengeneinheiten.");
      }

      else {
        	System.out.println("Berechnung nicht moeglich, bitte einen Wert > Null eingeben !");

      }

   }

}
 
Zuletzt bearbeitet:

Neue Themen


Oben