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?
 
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]);
    }
}
 
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
 
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?
 
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.
 
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 🙁
 
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:
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??^^
 
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?
 

Zurück
Oben