1. Dashboard
  2. Forum
    1. Unerledigte Themen
  3. Mitglieder
    1. Letzte Aktivitäten
    2. Benutzer online
    3. Team-Mitglieder
    4. Trophäen
    5. Mitgliedersuche
  4. Tutorial Bereich
  • Anmelden
  • Registrieren
  • Suche
Dieses Thema
  • Alles
  • Dieses Thema
  • Dieses Forum
  • Seiten
  • Forum
  • Lexikon
  • Erweiterte Suche
  1. Informatik Forum
  2. Webmaster & Internet
  3. Entwicklung

länge eines Integer

  • meister-dv
  • 1. Mai 2005 um 13:43
  • Unerledigt
  • meister-dv
    3
    meister-dv
    Mitglied
    Punkte
    85
    Beiträge
    14
    • 1. Mai 2005 um 13:43
    • #1

    Hallo zusammen!!
    habe ein Problem muss bei einen Programm die länge eines Intergers überprüfen mit den befehlen length charAt und isdigit. Da ich nicht sooo viel ahnung von java habe bekomme ich absoulut nicht hin bitte helft mir!!!!

    Ich muss überprüfen ob die identnummer immer genau 6 stellen hat!!!

    Danke schon mal im vorraus

    bin echt verzweifelt

    Java
    //Klasse Bauteil
     
    import java.io.*;
    public class BauteilE
    {
    String bezeichnung;
    int identnummer;
    double preis;
     
    public void eingebenDatenalt()
    {
    this.bezeichnung="Schraubstock";
    this.identnummer=456840;
    this.preis=45.45;
    }
    public void eingebenDaten()
    {
    BufferedReader ein=new BufferedReader(new InputStreamReader(System.in));
    try
    {
    System.out.print("Bezeichnung :");
    this.bezeichnung=ein.readLine();
    System.out.print("Identnummer :");
    this.identnummer=Integer.valueOf(ein.readLine()).intValue();
    System.out.print("Preis :");
    this.preis=Double.valueOf(ein.readLine()).doubleValue();
    }
    catch(IOException ioe)
    {
    System.out.println(ioe.toString());
    }
    }
    public BauteilE()
    {
    eingebenDaten();
    }
    public BauteilE(String b, int i, double p)
    {
    this.bezeichnung=b;
    this.identnummer=i;
    this.preis=p;
    }
    public void identOK(int i, int b,int c)
    {
    this.identnummer=b;
    i=6;
    if (i==b.charAt(b.length);
    {
    System.out.println("Die Identnummer hat genau 6 Zeichen");
    }
    }
    public void ausgebenAufBildschirm()
    {
    System.out.println("Bezeichnung :"+this.bezeichnung);
    System.out.println("Identnummer :"+this.identnummer);
    System.out.println("Preis: :"+this.preis);
     
    }
    public static void main (String[] args)
    {
    BauteilE bauteil=new BauteilE();
    BauteilE bauteil2=new BauteilE("Tischkreissäge",456841,255.55);
    BauteilE bauteil3=new BauteilE();
    bauteil.ausgebenAufBildschirm();
    bauteil2.ausgebenAufBildschirm();
    bauteil3.identOK();
     
    }
    }
    Alles anzeigen
  • Dimitrij
    7
    Dimitrij
    Mitglied
    Reaktionen
    12
    Punkte
    437
    Beiträge
    73
    • 1. Mai 2005 um 14:00
    • #2
    Code
    public void identOK()
     {
    	 String s=String.valueOf(identnummer);
    	 if (s.length()==6)
    	 {
    		  System.out.println("Die Identnummer hat genau 6 Zeichen");
    	 }
     }

    de.lernu.net, lingwadeplaneta.info

  • meister-dv
    3
    meister-dv
    Mitglied
    Punkte
    85
    Beiträge
    14
    • 1. Mai 2005 um 14:16
    • #3

    danke hat mir sehr geholfen!

  • gelbasack
    25
    gelbasack
    Mitglied
    Reaktionen
    90
    Punkte
    6.525
    Beiträge
    1.241
    • 1. Mai 2005 um 14:32
    • #4

    Wenn die Zahl positiv sein muss, würde ich eher eine Abfrage machen mit

    Code
    if(99999<zahl<1000000)


    Wenn auch negative Zahlen erlaubt sind, entsprechend andere Abfrage. Aber einen String machen und dessen Länge bestimmen finde ich persönlich etwas seltsam.

  • meister-dv
    3
    meister-dv
    Mitglied
    Punkte
    85
    Beiträge
    14
    • 1. Mai 2005 um 14:59
    • #5

    ja find ich auch aber wir müssen das mit diesem lenght() befehl machen und dann braucht man ja nen String

  • JohnFoo
    20
    JohnFoo
    Mitglied
    Reaktionen
    61
    Punkte
    4.231
    Beiträge
    761
    • 1. Mai 2005 um 15:08
    • #6
    Zitat von gelbasack

    Wenn auch negative Zahlen erlaubt sind, entsprechend andere Abfrage. Aber einen String machen und dessen Länge bestimmen finde ich persönlich etwas seltsam.


    Eine reine Integer-basierte Abfrage ist auf jeden Fall komplizierter. Wenn die String-Lösung einen rasch ans Ziel bring spricht nichts dagegen - denke ich.

  • a9bejo
    21
    a9bejo
    Mitglied
    Reaktionen
    42
    Punkte
    4.697
    Beiträge
    913
    • 1. Mai 2005 um 19:17
    • #7
    Zitat von gelbasack

    Wenn die Zahl positiv sein muss, würde ich eher eine Abfrage machen mit

    Code
    if(99999<zahl<1000000)


    Wenn auch negative Zahlen erlaubt sind, entsprechend andere Abfrage. Aber einen String machen und dessen Länge bestimmen finde ich persönlich etwas seltsam.

    interressante überlegung. Ich würde aber die string methode vorziehen, aus folgendem grund:

    wenn du mir eine zahl gibst und mich fragst, ob die genau sechs stellen hat, dann würde ich nicht überlegen, zwischen welchen zwei zahlen sie stehen muss, damit sie 6 stellen hat.

    Ich würde stattdessen einfach die ziffern abzählen, sprich die zahl als eine kette von zeichen betrachten. Also genau dasselbe, als wenn du mir statt einer zahl eine reihe von buchstaben gibst und mich da nach den stellen fragst.

    ein string ist ja (logisch betrachtet) nichts weiter als eine liste von zeichen. Also ist die konvertierung in String eigentlich genau das, was man selbst instinktiv machen würde.

    Code
    123456.to_s.length == 6

    lg, Benjamin Ferrari, bookworm.at

  • gelbasack
    25
    gelbasack
    Mitglied
    Reaktionen
    90
    Punkte
    6.525
    Beiträge
    1.241
    • 1. Mai 2005 um 19:38
    • #8
    Zitat von a9bejo
    Code
    123456.to_s.length == 6


    String.valueOf(-12345).length()==6 - müsste man also den ersten Char abfragen... einigen wir uns auf Geschmackssache? :winking_face:

  • a9bejo
    21
    a9bejo
    Mitglied
    Reaktionen
    42
    Punkte
    4.697
    Beiträge
    913
    • 1. Mai 2005 um 19:45
    • #9
    Zitat von gelbasack

    String.valueOf(-12345).length()==6 - müsste man also den ersten Char abfragen... einigen wir uns auf Geschmackssache? :winking_face:

    dann nehm ich halt den absolutwert:

    Code
    -123456.abs.to_s.length == 6

    :winking_face:

    mein argument ist ja auch gar nicht so der aufwand der abfrage, sondern die öffensichtlichste lösung zu finden. Ich denke, die stringkonvertierung ist der direktere weg zum ziel, zumindest wenn nach der anzahl der stellen gefragt wird.

    Wenn wir statt einer id z.b einen geldbetrag hätten, der zwischen 99999 und 1000000 euro liegen muss, dann würd ich das auch so wie du abprüfen.

    lg, Benjamin Ferrari, bookworm.at

  • a9bejo
    21
    a9bejo
    Mitglied
    Reaktionen
    42
    Punkte
    4.697
    Beiträge
    913
    • 1. Mai 2005 um 19:54
    • #10

    btw, meister-dv:

    http://www.informatik-forum.at/showpost.php?p=140998&postcount=3

    lg, Benjamin Ferrari, bookworm.at

  • meister-dv
    3
    meister-dv
    Mitglied
    Punkte
    85
    Beiträge
    14
    • 1. Mai 2005 um 20:07
    • #11

    danke beim nächsten mal;)

  • meister-dv
    3
    meister-dv
    Mitglied
    Punkte
    85
    Beiträge
    14
    • 4. Mai 2005 um 11:00
    • #12

    HI zusammen habe noch nen Problem wenn ich das ding in nen Strin umwandel weiß der aber nicht ob ich 6 zaheln eingegeben habe sonderen prüft nur die länge des strings und wenn uchstaben drin sind ist es immer noch OK!!



    kurz er sol noch überprüfen ob das alles zahlen sind

  • a9bejo
    21
    a9bejo
    Mitglied
    Reaktionen
    42
    Punkte
    4.697
    Beiträge
    913
    • 4. Mai 2005 um 11:19
    • #13

    Also wenn du eine zahl in einen string umgewandelt hast, kannst du dir wohl sicher sein, das da auch nur zahlen drinnen steht :)

    wenn du einen string hast und wissen willst, ob da nur ziffern drinnen stehen, kannst du das mit java.lang.Integer.valueOf(java.lang.String) erreichen prüfen (es wird eine exception geworfen wenn das konvertieren schiefgeht, und die kannst du abfangen).

    Ich würde hier aber zwei fliegen mit einer klappe schlagen und eine regular expression in der form /^[0-9]{6}$/ verwenden. Die stellt sicher, dass es zahlen sind und zwar genau sechs.

    lg, Benjamin Ferrari, bookworm.at

  • gelbasack
    25
    gelbasack
    Mitglied
    Reaktionen
    90
    Punkte
    6.525
    Beiträge
    1.241
    • 4. Mai 2005 um 11:21
    • #14

    Dafür hast du isDigit() (meiner Meinung nach gibt es schönere Wege, aber die Funktion solltest du ja verwenden)
    Ich würde also eine Schleife machen, die bis zur Länge vom String zählt und immer deinString.charAt(i).isDigit() aufruft.

  • meister-dv
    3
    meister-dv
    Mitglied
    Punkte
    85
    Beiträge
    14
    • 4. Mai 2005 um 11:37
    • #15

    gelbersack so habe ich mir das auch gedacht bekomme das nur nicht hin

  • gelbasack
    25
    gelbasack
    Mitglied
    Reaktionen
    90
    Punkte
    6.525
    Beiträge
    1.241
    • 4. Mai 2005 um 12:19
    • #16

    int i=0; // zum Zählen
    String zahl="123456";
    boolean error=false;
    for(i=0; i<zahl.length(); i++){
    if(!Character.isDigit(zahl.charAt(i))) error=true;
    break;
    }
    if(error) ... ;//deine Fehlerbehandlung
    else ... //weiter hier

    So ca.
    charAt(i).isDigit() war vorhin falsch angeschrieben. isDigit() findest du in der API unter Character. charAt(int i) ist eine Methode von String.

  • a9bejo
    21
    a9bejo
    Mitglied
    Reaktionen
    42
    Punkte
    4.697
    Beiträge
    913
    • 4. Mai 2005 um 13:06
    • #17

    hier mal alle drei wege im vergleich:

    Java
    import java.util.regex.Pattern;
    
    
    public class IdValidationTest {
    
      /**Mit charAt und isDigit: */
      public boolean isValidId(String id) {
        if (id.length() != 6) {
          return false;
        }
    
    
        for (char c : id.toCharArray()) {
          if (!Character.isDigit(c)) {
            return false;
          }
        }
        return true;
      }
    
      /**Mit Regular Expressions*/
      public boolean isValidId_2(String id) {
        Pattern pattern = Pattern.compile("^[0-9]{6}$");
        return pattern.matcher(id).find();
      }
    
      /**Mit Integer Conversion*/
      public boolean isValidId_3(String id) {
        if(id.length() != 6){return false;}
        try {
          Integer.valueOf(id);
          return true;
        } catch (NumberFormatException e) {
          return false;
        }
      }
      public static void main(String[] args) {
        new IdValidationTest().eval();
      }
    
    
      public void eval() {
    
        final String[] testdata = new String[]{"123456","12d456","1234567","abcdefg"};
    
        for(String id : testdata){
          String status;
    
          status = isValidId(id) ? "valid" : "invalid";
          System.out.println("(Mit charAt und isDigit) id '"+id + "' is " + status);
    
          status = isValidId_2(id) ? "valid" : "invalid";
          System.out.println("(Mit Regular Expression) id '"+id + "' is " + status);
    
          status = isValidId_3(id) ? "valid" : "invalid";
          System.out.println("(Mit Integer Conversion) id '"+id + "' is " + status);
    
          System.out.println();
        }
    
      }
    }
    Alles anzeigen

    lg, Benjamin Ferrari, bookworm.at

  • phax
    5
    phax
    Mitglied
    Punkte
    205
    Beiträge
    41
    • 4. Mai 2005 um 17:55
    • #18

    Nur der Vollständigheit halber:

    Code
    lenOfNumber = log10 (abs (value));


    -> löst dein Problem nicht, ist aber kreativ :winking_face:

  • a9bejo
    21
    a9bejo
    Mitglied
    Reaktionen
    42
    Punkte
    4.697
    Beiträge
    913
    • 4. Mai 2005 um 20:19
    • #19

    Du must aber noch aufrunden, damit das funktioniert:

    Code
    n = 123456
    log10(n) == 5.09151220162777
    log10(n).ceil == 6

    lg, Benjamin Ferrari, bookworm.at

  • mas
    9
    mas
    Mitglied
    Reaktionen
    1
    Punkte
    751
    Beiträge
    143
    • 5. Mai 2005 um 02:19
    • #20
    Zitat von a9bejo

    Du must aber noch aufrunden, damit das funktioniert:

    und bei 1 000 000 ergibt das dann 6......

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!

Benutzerkonto erstellen Anmelden

Benutzer online in diesem Thema

  • 1 Besucher

Rechtliches

Impressum

Datenschutzerklärung