Problème avec les types de variables en java
Résolu
Chabanus
Messages postés
978
Date d'inscription
Statut
Membre
Dernière intervention
-
Chabanus Messages postés 978 Date d'inscription Statut Membre Dernière intervention -
Chabanus Messages postés 978 Date d'inscription Statut Membre Dernière intervention -
Bonsoir,
Je n'arrive pas a enlever l'erreur sur cette ligne:
Avec int y a pas d'erreurs mais quand je mets long y a une erreur, j'ai mis long a cause de cette erreur:
Exception in thread "main" java.lang.OutOfMemoryError: Requested array size exceeds VM limit
at ip.main(ip.java:106)
Vous pouvez m'expliquer svp merci
Cordialement
Je n'arrive pas a enlever l'erreur sur cette ligne:
long binaire[]= new long[(long) Math.pow(2, nb[0].length())];
Avec int y a pas d'erreurs mais quand je mets long y a une erreur, j'ai mis long a cause de cette erreur:
Exception in thread "main" java.lang.OutOfMemoryError: Requested array size exceeds VM limit
at ip.main(ip.java:106)
Vous pouvez m'expliquer svp merci
Cordialement
A voir également:
- Problème avec les types de variables en java
- Waptrick java football - Télécharger - Jeux vidéo
- Jeux java itel - Télécharger - Jeux vidéo
- Eclipse java - Télécharger - Langages
- Java apk - Télécharger - Langages
- Waptrick java voiture - Télécharger - Jeux vidéo
7 réponses
Salut,
java.lang.OutOfMemoryError: Requested array size exceeds VM limit
Ceci signifie que l'application tente d'allouer un tableau plus grand que la taille du heap.
Que vaut nb[0].length() ?
Cdlt
java.lang.OutOfMemoryError: Requested array size exceeds VM limit
Ceci signifie que l'application tente d'allouer un tableau plus grand que la taille du heap.
Que vaut nb[0].length() ?
Cdlt
Merci d'avoir répondu :D
Voici le programme :
Voici le programme :
import java.util.Scanner; public class ip { public static void main(String[] args){ char carac = ' '; char choix = ' '; do { System.out.println("Entrez une adresse ip !"); Scanner sc = new Scanner(System.in); String ip = sc.nextLine(); if(!ip.matches("^(([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\\.){3}([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])$")) System.err.println("Votre addresse ip est incorrecte"); else { String str[]=ip.split("\\."); int categorie = Integer.parseInt(str[0]); int H1 = Integer.parseInt(str[1]); int H2 = Integer.parseInt(str[2]); int H3 = Integer.parseInt(str[3]); char classe = ' '; if(categorie < 127 && categorie > 0) { System.out.println("Votre addresse ip est de Catégorie A"); classe = 'A'; } else if(categorie < 192 && categorie > 127) { System.out.println("Votre addresse ip est de Catégorie B"); classe = 'B'; } else if(categorie < 223 && categorie > 192) { System.out.println("Votre addresse ip est de Catégorie C"); classe = 'C'; } sc = new Scanner(System.in); System.out.println("En combien de sous-réseaux voulez-vous le décomposer ? !"); int sr = sc.nextInt(); int bit=0; int tableau[] = {1,2,4,8,16,32,64,128,256,512}; for(int i=0; i < 9; i++) { if(sr == tableau[i] && sr == Math.pow(2,i)) bit = i; else if (sr < tableau[i+1] && sr > tableau[i-1]) bit = i; } System.out.println("Le nombre de bit est "+bit); if(classe == 'A') { System.out.println("Address du réseau est :"+categorie+".0.0.0"); if(bit < 8) { String h1 = "00000000" ; String h2 = "00000000"; String h3 = "00000000"; String nb[] = new String[h1.length()]; nb[0]=h1.substring(0,bit); nb[1]=h1.substring(bit,h1.length()); long binaire[]= new long[(long) Math.pow(2, nb[0].length())]; long chaines[]= new long[(long) Math.pow(2, binaire.length)]; long machine[]= new long[(long) Math.pow(2, nb[1].length())]; long chainem[]= new long[(long) Math.pow(2, machine.length)]; String zero ="0"; for(int i=0; i < binaire.length; i++){ do{ String chaine =Integer.toBinaryString(i); String chaine2 = zero.concat(chaine); chaines[i]=Integer.parseInt(chaine2); }while(chaines[i] != binaire.length); String chain1 = Long.toString(chaines[i]); String result = chain1.concat(nb[1]); int decimal = Integer.parseInt(result,2); String résultat = nb[1].replaceAll("0","1"); String resultt = chain1.concat(résultat); int decima = Integer.parseInt(resultt,2); System.out.println("Address broadcast du sous réseau :"+i+" est :"+categorie+"."+decimal+".0.0"); System.out.println("Le sous réseau "+i+" accepte des address entre :"+categorie+"."+decimal+".0.1 a "+categorie+"."+decima+".255.254" ); System.out.println("Address broadcast du sous réseau :"+i+" est :"+categorie+"."+decima+".255.255"); } } System.out.println("Address broadcast est :"+categorie+".255.255.255"); } } System.out.println("Voulez-vous recommencer ? O/N"); sc = new Scanner(System.in); carac= sc.next().charAt(0); }while(carac == 'O'); } }
Il faut bien mettre : long binaire[]= new long[(int) Math.pow(2, nb[0].length())];
Mais j'aurais bien aimé savoir la valeur de nb[0].length() qui a provoqué l'exception ?
Lorsque tu lances ton code, utilise : java -Xms32m -Xmx128m (ce sont les valeurs par défaut du heap) et dis moi si t'obtiens encore l'erreur.
Cdlt
Mais j'aurais bien aimé savoir la valeur de nb[0].length() qui a provoqué l'exception ?
Lorsque tu lances ton code, utilise : java -Xms32m -Xmx128m (ce sont les valeurs par défaut du heap) et dis moi si t'obtiens encore l'erreur.
Cdlt
Salut,
Tu n'as certainement pas assez de place en memoire virtuelle pour loger ton tableau de long avec le nombre d'éléments obtenus avec [(long) Math.pow(2, nb[0].length())];
Soit il faut revoir la formule, soit augmenter la taille de la mémoire virtuelle.
Qu'y a-t-il dans nb[0] ?
Cordialement,
Dan
Tu n'as certainement pas assez de place en memoire virtuelle pour loger ton tableau de long avec le nombre d'éléments obtenus avec [(long) Math.pow(2, nb[0].length())];
Soit il faut revoir la formule, soit augmenter la taille de la mémoire virtuelle.
Qu'y a-t-il dans nb[0] ?
Cordialement,
Dan
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
J'ai déjà essayer de mettre (int) mais a chaque fois cela me mets cette erreur pendant l'exécution :
Vous avez essayer d'exécuter le programme ?
pour 5 bits c'est 2puissance(2puissance(5)) donc 2 puissance 32 = 4294967296
Entrez une adresse ip ! 5.22.22.33 Votre addresse ip est de Catégorie A En combien de sous-réseaux voulez-vous le décomposer ? ! 23 Exception in thread "main" java.lang.OutOfMemoryError: Requested array size exceeds VM limit at ip.main(ip.java:82) Le nombre de bit est 5 Address du réseau est :5.0.0.0
Vous avez essayer d'exécuter le programme ?
pour 5 bits c'est 2puissance(2puissance(5)) donc 2 puissance 32 = 4294967296
binaire.length vaut 32.
Tu alloues donc un tableau de 2 puissance 32 (4294967296). Alors que par défaut, la taille maximale du heap de ta VM est de 128m. D'où l'exception.
Tu n'as pas besoin d'allouer autant de place.
Un tableau de 32 ne serait-il pas suffisant ?
Tu alloues donc un tableau de 2 puissance 32 (4294967296). Alors que par défaut, la taille maximale du heap de ta VM est de 128m. D'où l'exception.
Tu n'as pas besoin d'allouer autant de place.
Un tableau de 32 ne serait-il pas suffisant ?