Scanner auf 10 Stellen begrenzt?

i++

Mitglied
Hi!
Vorhin schrieb ich ein Programm, welches eine Binärzahl auf eine Dezimalzahl umrechnet.
Beim Ausprobieren fiel mir auf, dass bei einer Int länge von 10 Schluss ist.
Sobald ich 11 Stellen ausgebe, zeigt mir Java exception an.
Somit funktioniert mein Programm nur bis zur Dezimalzahl 1023 :(

Im Internet fand ich leider keine Information auf wie viele Stellen der Scanner beschränkt ist, könnt ihr mir Abhilfe schaffen, damit mein Programm auch bis n Stellen funktioniert? Kann man den Scanner "erweitern"?
 
K

kneitzel

Gast
Wenn Du Dir die Scanner Klasse ansiehst (z.B. https://docs.oracle.com/javase/7/docs/api/java/util/Scanner.html), dann siehst Du, dass da deutlich mehr möglich ist.

Wenn Du einen int Wert auslesen lässt, dann ist dieser natürlich auf den Wertebereich eines int Wertes beschränkt. So geht der int von -2147483648 (-2^31) bis 2147483647 (2^31 -1).

Es gibt aber auch noch den Datentyp long, der von -9223372036854775808 (-2^63) bis 9223372036854775807 (2^63 -1) geht.

Sollte dies auch nicht ausreichen, dann kann man BigInteger oder BigDezimal nutzen.
 

mihe7

Top Contributor
Vermutung: Du verwendest Scanner#nextInt() - ein int ist ein 32-Bit breiter, vorzeichenbehafteter Datentyp, der größte darstellbare positive Wert beträgt also ca. 2,1 Mrd., was 10 Stellen entspricht. EDIT: @kneitzel war schneller :)

Hier mal Code, der auch bei sehr großen Zahlen noch funktioniert:
Java:
import java.math.BigInteger;
import java.util.Scanner;

public class Test {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String line = sc.nextLine();
        BigInteger z = BigInteger.ZERO;
        BigInteger TWO = BigInteger.valueOf(2);

        for (char c : line.toCharArray()) {
            if (c == '0') {
                z = z.multiply(TWO);
            } else if (c == '1') {
                z = z.multiply(TWO).add(BigInteger.ONE);
            }
        }
        System.out.println(z.toString());
    }   
}
 
Zuletzt bearbeitet:

i++

Mitglied
Danke euch zwei für eure schnellen Antworten!
Ich hab die Integer auf Long umgeändert und kann nun bis 65k anstatt nur 1k!
Könnt ihr bitte meinen Code mal bewerten und Verbesserungen mir erläutern? Bitte bedenkt, dass ich Programmieranfänger bin. In erster Linie bin ich froh, dass ich das Programm funktionierend hingebracht habe. Subjektiv würde ich sagen, dass es mit Sicherheit noch kompakter zum Programmieren ginge, also weniger Zeilen sowie Variablen. Ich häng das Programm mal an, bitte schreibt mir eure Verbesserungen.

Code:
package schwachsinn;
import java.util.*;

/**
 * Das Programm rechnet eine Binärzahl in eine Dezimalzahl um.
 * @author xyz
 *
 */
public class BinearAufDezimal {

    //Hauptprogramm ausführen
    public static void main(String[] args) {
        Scanner sc= new Scanner(System.in);
        
        //Eingabe der Binärzahl
        System.out.println("Geben Sie die Binärzahl ein:");
        long binary=sc.nextLong();
        
        //Berechnung der Ziffernanzahl
        int anzahl = (int)Math.log10( binary ) + 1;
    
        //Variablen initalisieren
        int decimal=0; long teiler=1; int i=0;
        
        for(int x=1; x<=anzahl; x++) {
            
            //Gibt jeweils die einserstelle, zehnerstelle etc... weiter
            long y=(binary/teiler)%10;
            
            //Umrechnung von Binär auf Dezimal
            int z=0;
            if (y==1) z=(int)(Math.pow(2, i));
            i++;
            teiler*=10;
            decimal=decimal+z;
            }
        
        //Ausgabe
        System.out.println("Die Dezimalzahl lautet: "+decimal);

        sc.close();
    }
}
 
K

kneitzel

Gast
Also was mir bei Deinem Code auffällt:
- i ist doch immer x-1, also braucht man doch eigentlich nur eine der Variablen, oder?
- Die Begrenzung ist natürlich noch relativ stark. Wieso gehst Du nicht hin und liest einen String ein? Dann hast Du die Limitierung nicht mehr.
- Scanner auf System.in war schon öfters ein Thema. Scanner implementiert AutoCloseable, d.h. dein close() Aufruf ist soweit korrekt. Aber das schließt dann auch System.in, was blöd ist. Daher war schon einmal die Überlegung hier im Forum dass man dies einfach als public static final nutzt ... dann gibt es keinen close Aufruf. Und wenn man das mit close() haben will, dann wäre try with ressources besser.

Also eine Lösung, wie ich sie schreiben würde, wäre in etwa so:
Code:
package schwachsinn;

import java.util.*;

/**
 * Das Programm rechnet eine Binärzahl in eine Dezimalzahl um.
 */
public class BinaerAufDezimal {

    /**
     * Scanner on System.in to use globaly.
     */
    public static final Scanner IN = new Scanner(System.in);

    /**
     * Hauptprogramm.
     * @param args Kommandozeilen Argumente, die nicht ausgewertet werden.
     */
    public static void main(String[] args) {
        // Eingabe der Binärzahl in einen String.
        System.out.println("Geben Sie die Binärzahl ein:");
        String binary=IN.next().trim();

        // Länge des Strings prüfen.
        int anzahl = binary.length();
        if (anzahl > 64) {
            System.err.println("Eingabe ist beschränkt auf 64 Ziffern.");
            return;
        }

        long decimal = 0;
        for(int index=0; index<anzahl; index++) {

            decimal = decimal<<1; // Verschiebe um eins

            switch (binary.charAt(index)) {
                case '0':
                    // Nothing to do.
                    break;

                case '1':
                    decimal++;
                    break;

                default:
                    System.err.println("Ungültges Zeichen, geben sie nur 0 und 1 für die Zahl ein!");
                    return;
            }
        }

        System.out.println("Die Dezimalzahl lautet: "+decimal);
    }
}
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
onlyxlia Anzahl Random Zahlen mit Scanner abfragen und in Array speichern Java Basics - Anfänger-Themen 10
M Scanner Input mit if überprüfen Java Basics - Anfänger-Themen 5
D Scanner Java Basics - Anfänger-Themen 2
T scanner nicht erkannt Java Basics - Anfänger-Themen 3
T scanner eingaben erkennen und umtauschen Java Basics - Anfänger-Themen 4
Ostkreuz Int Scanner auf Enter Eingabe prüfen Java Basics - Anfänger-Themen 4
H Scanner nextLine() bringt Dateipfad Java Basics - Anfänger-Themen 1
Jul1n4tor Scanner error bei Eingabe die kein Integer ist Java Basics - Anfänger-Themen 4
Jul1n4tor Programm mit Scanner und If-Statements Java Basics - Anfänger-Themen 2
I Scanner Loop Java Basics - Anfänger-Themen 1
J Scanner cannot be resolved to a type Java Basics - Anfänger-Themen 3
C Scanner und If-Anweisung in Kombi Java Basics - Anfänger-Themen 3
X Erste Schritte Scanner eingabe wird übersprungen Java Basics - Anfänger-Themen 4
T j.u.Scanner(Sys.in).nextLine() wieder schließen? Java Basics - Anfänger-Themen 5
J Erste Schritte Scanner Java Basics - Anfänger-Themen 4
P Mit dem Scanner Klassen aufrufen Java Basics - Anfänger-Themen 3
javapingu Endlosschleife bei User Input mit try Scanner Java Basics - Anfänger-Themen 7
C Problem mit mehreren Methoden + Scanner Java Basics - Anfänger-Themen 5
Poppigescorn Arrayliste Mittels Scanner erweitern Java Basics - Anfänger-Themen 6
Jan_x8 Timer/Scanner Java Basics - Anfänger-Themen 5
M Scanner Klasse Java Basics - Anfänger-Themen 4
W Objekte über Scanner Input; ToString Probleme... Java Basics - Anfänger-Themen 4
F Erste Schritte java.util.Scanner: Beliebig langen Text per Paste in Console eingeben ? Java Basics - Anfänger-Themen 14
H Quellcode Scanner Klasse Java Basics - Anfänger-Themen 2
N java.util.InputMismatchException Fehler Java Scanner Java Basics - Anfänger-Themen 5
S Scanner soll Groß-/ Kleinschreibung ignorieren Java Basics - Anfänger-Themen 2
Y Wie kann ich Konsoleneingaben durch den Scanner mit JUnit 4 testen? Java Basics - Anfänger-Themen 1
J Scanner-Klasse Java Basics - Anfänger-Themen 2
B Scanner-If/else kleine Abhebungs-Simulation Java Basics - Anfänger-Themen 3
A Scanner Befehl Java Anfänger Java Basics - Anfänger-Themen 8
D Scanner- Exception NoSuchElementException Java Basics - Anfänger-Themen 2
G Scanner nutzen und Index auslesen Java Basics - Anfänger-Themen 8
N Problem mit Scanner Java Basics - Anfänger-Themen 2
V Ersätze für Java-Scanner Java Basics - Anfänger-Themen 9
P Methode die eigentlich einen Scanner benötigt mit toString() Java Basics - Anfänger-Themen 5
A Scanner-Error Java Basics - Anfänger-Themen 8
D Java Scanner Java Basics - Anfänger-Themen 9
M String in Scanner einlesen Java Basics - Anfänger-Themen 6
N Eingabe Kommazahlen über Scanner Java Basics - Anfänger-Themen 2
ZH1896ZH Verstehe verschieden Scanner und hasNext() nicht ganz Java Basics - Anfänger-Themen 2
O Mehrfache Scanner-Eingabe durch Komma getrennt Java Basics - Anfänger-Themen 6
B Barcode Scanner Java Basics - Anfänger-Themen 3
V Wie lasse ich die for-Schleife so oft laufen wie per Scanner angegeben? Java Basics - Anfänger-Themen 3
L Scanner schließen in While-Schleife? Java Basics - Anfänger-Themen 2
S Scanner Java Basics - Anfänger-Themen 36
S Frage zu Scanner Java Basics - Anfänger-Themen 3
cpt.Tomato Scanner problem mit Passwort Login Java Basics - Anfänger-Themen 3
O Scanner Klasse Java Basics - Anfänger-Themen 8
M java.util.scanner Fehler Java Basics - Anfänger-Themen 5
B mehrere Werte mit scanner und while schleife einlesen, max berechnen bzw addieren Java Basics - Anfänger-Themen 2
W Eclipse Che Scanner Java Basics - Anfänger-Themen 8
H Vererbung Static Scanner Objekt verwenden - von StdIn in einer importierten Klasse lesen Java Basics - Anfänger-Themen 10
X Erste Schritte Problem mit scanner Java Basics - Anfänger-Themen 2
A Scanner.useLocale(Locale.US); Java Basics - Anfänger-Themen 4
M Datei einlesen mit Scanner funktioniert nicht (FileNotFoundException) Java Basics - Anfänger-Themen 6
I Scanner und Arrays Java Basics - Anfänger-Themen 2
M Scanner-Eingabe nach gewissem Zeitraum überprüfen Java Basics - Anfänger-Themen 2
Neoline Methoden Scanner Methode Java Basics - Anfänger-Themen 9
E Probleme mit Scanner Java Basics - Anfänger-Themen 4
A Java Scanner Funktioniert nicht Java Basics - Anfänger-Themen 2
B Vom scanner in ein Arraylist Java Basics - Anfänger-Themen 7
L Scanner Ausgabe Java Basics - Anfänger-Themen 37
S Zeilenumbruch mit Scanner erkennen Java Basics - Anfänger-Themen 9
O Erste Schritte Scanner mehrere male benutzen (Konsole) Java Basics - Anfänger-Themen 7
W Wie arbeite ich mit dem Typ Scanner? Java Basics - Anfänger-Themen 5
J Input/Output Scanner Input als etwas einsetzen Java Basics - Anfänger-Themen 3
R CMDTools Scanner Fehler Java Basics - Anfänger-Themen 10
D nextInt() nicht für Scanner definiert? Java Basics - Anfänger-Themen 2
N Operatoren Suchen nach einer bestimmten Eingabe (durch Scanner) Java Basics - Anfänger-Themen 7
F Scanner Problem Java Basics - Anfänger-Themen 8
T Variablen Array mit Scanner befüllen Java Basics - Anfänger-Themen 6
C Java Scanner einlesen von txt Dokument InputMismatch Java Basics - Anfänger-Themen 9
b1ck Scanner schließen, erneute Verwendung Java Basics - Anfänger-Themen 12
F Scanner - nextLine() gibt leeren String zurück Java Basics - Anfänger-Themen 2
T Problem mit Scanner. Java Basics - Anfänger-Themen 4
J Methode über Scanner aufrufen Java Basics - Anfänger-Themen 15
J Erste Schritte Scanner negative zahl einlesen und verwenden. Java Basics - Anfänger-Themen 6
W Methoden Probleme mit der Scanner Methode Java Basics - Anfänger-Themen 2
Silvascus Scanner Problem Java Basics - Anfänger-Themen 5
W Erste Schritte import java.util.scanner funktioniert nicht Java Basics - Anfänger-Themen 2
TheMenox Error bei Scanner - woher? Java Basics - Anfänger-Themen 14
D Fehler bei String eingabe via Scanner Java Basics - Anfänger-Themen 6
F Problem do while Schleife und Scanner Java Basics - Anfänger-Themen 2
O POI Apache sheet scanner Java Basics - Anfänger-Themen 1
A regulären Ausdruck mit Hilfe der Klasse Scanner in einem String finden Java Basics - Anfänger-Themen 2
F Array mit Scanner-Werten Java Basics - Anfänger-Themen 4
M Input/Output Scanner schließt nicht Java Basics - Anfänger-Themen 2
M Scanner class Java Basics - Anfänger-Themen 6
K Mit Scanner aus einer txt Datei lesen und jede Person mit name, vorname, geburtsdatum speichern Java Basics - Anfänger-Themen 5
S Array mit "foreach"-Schleife und nextInt (aus Scanner) beschreiben Java Basics - Anfänger-Themen 6
G Strings mit Scanner (nextLine) einlesen Java Basics - Anfänger-Themen 7
Q Scanner auf eine Zahl beschränken Java Basics - Anfänger-Themen 2
S Sonderzeichen '|' (u007C) mit Scanner einlesen Java Basics - Anfänger-Themen 1
T Scanner lässt sich nicht importieren Java Basics - Anfänger-Themen 1
R scanner in String funktioniert nicht Java Basics - Anfänger-Themen 1
P scanner ein Double einlesen Java Basics - Anfänger-Themen 10
A InputMismatchException mit Scanner Java Basics - Anfänger-Themen 6
J scanner, String einlesen und vergleichen Java Basics - Anfänger-Themen 3
B Input/Output Scanner-Probleme bei String-Lesen Java Basics - Anfänger-Themen 3
P Variablen Abfangen von eingaben per java.util.Scanner und weiter Verarbeitung Java Basics - Anfänger-Themen 7

Ähnliche Java Themen

Neue Themen


Oben