Arry Casting

Hallo
Ich versuche gerade ein String Array in ein long Array zu casten. Meine Idee war eine for-Schleife die so ausschaut:
Java:
public static void main(String[] args) {
    long[] zahlen;
    for(int i=0; i<=args.length; i++){
        zahlen[i]= (long) (args[i]);
             }
es kommt immer der Fehler "inconverible Types". Wieso ist das so?
 

Noctarius

Top Contributor
Geht auch nicht, du musst jeden String explizit in einen Long parsen [c]Long.parseLong(String)[/c].

Java:
public static void main(String[] args) {
    long[] zahlen;
    for(int i=0; i<=args.length; i++){
        zahlen[i]= Long.parseLong(args[i]);
    }
}
 
M

Marcinek

Gast
In Java gibt es Vererbung

Object <-- String

Du könntest nun ein String zu Object casten. Oder ein Object zu String, wenn das Objekt wirklich ein String ist.

Du könntest den String aber niemals zu einem Double casten oder iwas, was nicht in der hirarchie liegt.

Primitive Typen kann man auch casten

zum beispiel int i = (double) eineDouble
 

Noctarius

Top Contributor
Intern benutzt Java an vielen Stellen automatisch Casting, z.B. wenn eine Klasse mehrere Interfaces implementiert und du eines dieser Interfaces explizit anfragst [c]MyInterface foo = new MyInterfaceImpl();[/c]. Auch impliziert gecastet wird z.B. von Long nach long (also vom Wrappertype zum Simpletype).
Einen eigenen Cast nutzt man z.B. bei Raw-Types (Generics). Sagen wir mal du holst dir per [c]Class.for(String)[/c] eine Klasse. Du bekommst ein Objekt Class<?> was bedeutet, dass du eine Klasse hast welche irgendwie von Object (<?>) abgeleitet ist. Dies trifft automatisch auf alle Java-Klassen zu. Du weißt aber diese Klasse implementiert z.B. das Interface "MyInterface" von oben, dann musst du Java explizit anweisen diesen Cast zu machen:
Java:
Class<?> temp = Class.forName("MyInterfaceImpl");
Class<MyInterface> clazz = (Class<MyInterface>) temp;
 
noch eine abschließende Frage:
ich hab's jetzt so geschrieben :
Java:
public static void main(String[] args) {
    long[] zahlen;
    for(int i=0; i<=args.length; i++){
        zahlen[i]= Long.parseLong(args[i]);
    }
}
jetzt kommt immer, dass "zahlen" nicht initialisiert wurde. Wenn ich dann long[] zahlen= null; schreib, dann kommt (in eclpise) der Fehler, dass das "zahlen" in der for-Schleife immer als null gelesen wird. Es geht zwar zum kompilieren, aber dann kommt in der Ausführung dann eine Fehlermeldung auf Grund der zahlen[] = null.
Wie initialisiere ich dann richtig?
 

Eldorado

Bekanntes Mitglied
Java:
for(int i=0; i<args.length; i++){
        zahlen[i]= Long.parseLong(args[i]);
}
Nimm das "Gleich" bei "Kleiner-Gleich" in der Abbruchbedingung der for-Schleife raus.
 
G

Gastredner

Gast
Die Bedingung deiner for-Schleife muss auch i < args.length heißen, nicht <=.
Der Index ist 0-basiert, startet also bei 0 und geht bis length-1.
 
habs jetzt so
Java:
public static void main(String[] args) {
    long[] zahlen = new long[args.lenght];
    for(int i=0; i<args.length; i++){
        zahlen[i]= Long.parseLong(args[i]);
    }
}
immernoch out of Bounds :(
 
M

Marcinek

Gast
Bis auf die Tatsache, dass die variable falsch geschrieben war, entdecke ich keinen Fehler.

In welcher Zeile kommt die AIooBE?
 
hier mal der komplette Code:
Java:
import java.util.Arrays;

public class Mittelwert {

  public static long mittelwert(long[] zahlen) {
       long zaehler=0;

    for( int n=0; n <=zahlen.length; n++){
      zaehler = zaehler + zahlen[n];}
    return zaehler/zahlen.length;
  
    }
     

  public static void main(String[] args) {
    long[] zahlen = new long[args.length];
    for(int i=0; i<args.length; i++){
        zahlen[i]= Long.parseLong(args[i]);
    }
}
     

    System.out.println("Der Mittelwert von " + Arrays.toString(zahlen)
        + " ist: " + mittelwert(zahlen));
  }

}

Error ArrayIndexOutOfBoundsException in Zeilen 9 und 25( wobei 25 hier die System.out..Zeile sein soll)
 
hab den Fehler gerade gefunden. Und zwar wieder das <= in ein < in "mittelwert" ;)
aber das Ergebniss ist Integer. Wieso? Ich brauch long...
 
Zuletzt bearbeitet:
G

Gastredner

Gast
Sowohl int als auch long sind ganze Zahlen. Kann es sein, dass du eigentlich ein float/double suchst?
 
ach stimmt ja. Ich brauch ja double

aber bei
Java:
 return (double)(zaehler/zahlen.length);
kommt ein Error. Wo hab ich jetzt schon wieder meinen Fehler??^^
 

Noctarius

Top Contributor
Wenn eine der beiden Zahlen eine Fließkommazahl ist reicht das. Das strikte Typensystem in Java gibt an, dass aus 2 Ganzzahlen nur eine Ganzzahl entstehen kann.

Java:
double zaehler = 5;
double ergebnis = zaehler / 2; // Ergebnis 2.5

int zaehler = 5;
double ergebnis = zaehler / 2; // Ergebnis 2

int zaehler = 5;
double ergebnis = (double) zaehler / 2; // Ergebnis 2.5

int zaehler = 5;
double ergebnis = zaehler / (double) 2; // Ergebnis 2.5

int zaehler = 5;
double ergebnis = zaehler / 2.; // Ergebnis 2.5
 
also ich hab jetzt zaehler als "double zaehler;" initalisiert...aber dann kommt beim compilieren "possible loss of precision" found: double , required long bzg. des "return"
 
Um das Ganze anschaulicher zu machen :
Java:
  public static long mittelwert(long[] zahlen) {
       double zaehler=0;

    for( int n=0; n <=zahlen.length; n++){
      zaehler = zaehler + zahlen[n];}
    return zaehler/zahlen.length;
  
    }
ich müsste irgendwie den return als double initialisieren oder?
 
also
Java:
 return (double)(zaehler/zahlen.length);
?
aber wohl eher nicht, weil ich da wieder den loss of precision Fehler bekomm...
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
LetsSebi Methode, die einen arry von objekten speichert in einer datei Java Basics - Anfänger-Themen 6
T Arry ausgeben Java Basics - Anfänger-Themen 1
T Arry definieren in 3 Dim. Java Basics - Anfänger-Themen 12
T Variablen NullPointerException bei einem Arry? Java Basics - Anfänger-Themen 6
G highscore arry Java Basics - Anfänger-Themen 7
S Auf Element in Arry zugreifen Java Basics - Anfänger-Themen 7
U Arry verschieben Java Basics - Anfänger-Themen 2
S prob mit add in einer arry list Java Basics - Anfänger-Themen 13
C Problem: Mehrdimensionales Arry Java Basics - Anfänger-Themen 10
G arry maxbetrag Java Basics - Anfänger-Themen 4
C Casting Java Basics - Anfänger-Themen 8
F Interface Casting Java Basics - Anfänger-Themen 13
N Generics und Casting eines Objekts Java Basics - Anfänger-Themen 1
temi (Down-)Casting Problem Java Basics - Anfänger-Themen 5
X Datentypen Casting?! Java Basics - Anfänger-Themen 7
P Casting Warning bei Iterator Java Basics - Anfänger-Themen 32
H Datentypen Casting objects Java Basics - Anfänger-Themen 29
S Class Casting Allgemein Java Basics - Anfänger-Themen 3
Unsympath OOP Up- und Down-Casting Java Basics - Anfänger-Themen 3
R Casting Problem Java Basics - Anfänger-Themen 15
B Anfängerprobleme (Casting,...) Java Basics - Anfänger-Themen 5
W Generische Klassen und Casting Java Basics - Anfänger-Themen 6
D OOP casting/get & set Methoden Java Basics - Anfänger-Themen 7
J Type-Casting Java Basics - Anfänger-Themen 8
G Überschreiben von Methoden beim Casting Java Basics - Anfänger-Themen 7
T Casting von Objekten Java Basics - Anfänger-Themen 2
G Casting, Ordinalzahl eines Buchstabens? Java Basics - Anfänger-Themen 4
P Casting von Object zu (String || Integer) Java Basics - Anfänger-Themen 8
B Casting variabel gestalten. Java Basics - Anfänger-Themen 9
U casting: ArrayList to String[] Java Basics - Anfänger-Themen 10

Ähnliche Java Themen

Neue Themen


Oben