Problème avec les types de variables en java
Résolu/Fermé
Chabanus
Messages postés
978
Date d'inscription
dimanche 23 décembre 2007
Statut
Membre
Dernière intervention
11 novembre 2011
-
20 mars 2009 à 16:36
Chabanus Messages postés 978 Date d'inscription dimanche 23 décembre 2007 Statut Membre Dernière intervention 11 novembre 2011 - 20 mars 2009 à 17:30
Chabanus Messages postés 978 Date d'inscription dimanche 23 décembre 2007 Statut Membre Dernière intervention 11 novembre 2011 - 20 mars 2009 à 17:30
A voir également:
- Problème avec les types de variables en java
- Waptrick java football - Télécharger - Jeux vidéo
- Jeux java itel football - Télécharger - Jeux vidéo
- Java apk - Télécharger - Langages
- Java décompiler - Télécharger - Langages
- Java runtime - Télécharger - Langages
7 réponses
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 844
20 mars 2009 à 16:50
20 mars 2009 à 16:50
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
Chabanus
Messages postés
978
Date d'inscription
dimanche 23 décembre 2007
Statut
Membre
Dernière intervention
11 novembre 2011
70
20 mars 2009 à 16:53
20 mars 2009 à 16:53
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'); } }
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 844
20 mars 2009 à 17:00
20 mars 2009 à 17:00
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
Utilisateur anonyme
20 mars 2009 à 17:04
20 mars 2009 à 17:04
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
Chabanus
Messages postés
978
Date d'inscription
dimanche 23 décembre 2007
Statut
Membre
Dernière intervention
11 novembre 2011
70
20 mars 2009 à 17:16
20 mars 2009 à 17:16
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
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 844
20 mars 2009 à 17:24
20 mars 2009 à 17:24
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 ?
Chabanus
Messages postés
978
Date d'inscription
dimanche 23 décembre 2007
Statut
Membre
Dernière intervention
11 novembre 2011
70
20 mars 2009 à 17:30
20 mars 2009 à 17:30
Oui je mettais tromper en fait dans le code
long binaire[]= new long[(int) Math.pow(2, nb[0].length())];
long chaines[]= new long[(int) binaire.length];
long machine[]= new long[(int) Math.pow(2, nb[1].length())];
long chainem[]= new long[(int) machine.length];
Merci
long binaire[]= new long[(int) Math.pow(2, nb[0].length())];
long chaines[]= new long[(int) binaire.length];
long machine[]= new long[(int) Math.pow(2, nb[1].length())];
long chainem[]= new long[(int) machine.length];
Merci