String kann nicht Werte von Long annehmen

Hanschyo

Mitglied
Ich habe ein Programm geschrieben, wo der User eine Zahl eingibt und bestimmt Dinge geprüft werden (z.B. ob die zahl eine Primzahl ist). Bei einer Stelle musste ich Longs in Strings umwandeln. Nur wenn ich nun eine Zahl eingebe, die über den maximalwert von int geht, spuckt das Programm eine Fehlermeldung aus und schließt sich.
Hier der Code:
Java:
import java.io.File;
import java.util.Scanner;
public class Funktionen_einfach {
  public static long anzahlTeiler(long n) {
    long teiler=0;
    for (long i=1; i<=n; i++) {
      if (n%i==0) {
        teiler++;
      } // end of if
    } // end of for
    return teiler;
  }
    public static String Teiler(long q) {
    StringBuilder x = new StringBuilder();
    String b = "";
    for (long i=1;i<=q;i++ ) {
      if (q%i==0) {
        x.append(i+(","));
      }
    } // end of for
    if (x.length() > 0) {
      x.setLength(x.length() - 1); 
    } // end of if
    b = "Teiler sind: " + x;
    return b;
  }
  public static boolean istPrim(long z) {
    if (anzahlTeiler(z)==2) {
      return true;
    } else {
      return false;
    } // end of if-else
  }
  public static String naechstePrim(long x) {
    long m = x+1;
    long l = x-1;
    String p;
    while (!istPrim(m) && !istPrim(l)) {
      m++;  
      l--;
    } // end of while) {
    if (istPrim(m) && istPrim(l)) {
      String s = Long.toString(l) + ( "," ) + Long.toString(m);
      return s;
    } else {
      if (istPrim(m)) {
        return Long.toString(m);
      } // end of if
      else {
        return Long.toString(l);
      } // end of if-else
    }
  }
  public static void main(String[] args) {
    int k = 1;
    while (k==1) {
      System.out.println("Zahl eingeben: ");
      Scanner sc = new Scanner(System.in);
      long d = sc.nextInt();
      String f = "";
      if (istPrim(d)) {
        System.out.println("Die Zahl "+d+" ist eine Primzahl.");
      } else {
        System.out.println("Die Zahl "+d+" ist keine Primzahl.");
      } // end of if-else
      System.out.println("Nächste Primzahl(en) ist/sind "+naechstePrim(d));
      if (!istPrim(d)) {
        System.out.println(Teiler(d));
      }
      System.out.println("Wollen Sie das Programm beenden?(ja/nein)");
      f = sc.next();
      if (f.equals("ja")) {
        k++;
      } // end of if
    } // end of while
  } // end of main
} // end of class Funktionen
Fehlermeldung:
Code:
Exception in thread "main" java.util.InputMismatchException: For input string: "3000000000"
        at java.base/java.util.Scanner.nextInt(Scanner.java:2167)
        at java.base/java.util.Scanner.nextInt(Scanner.java:2115)
        at Funktionen_einfach.main(Funktionen_einfach.java:66)
 
Naja du rufst ja auch die nextInt() Methode auf und versuchst einen Long einzugeben. nextLong() würde da schon mehr Sinn machen, oder? 😉

Edit: Zu spät 😛
 

Neue Themen


Zurück
Oben