Problème de POO et de 64bits

Résolu/Fermé
Black n' Sad Messages postés 3 Date d'inscription mercredi 6 novembre 2013 Statut Membre Dernière intervention 22 novembre 2013 - 6 nov. 2013 à 14:08
Black n' Sad Messages postés 3 Date d'inscription mercredi 6 novembre 2013 Statut Membre Dernière intervention 22 novembre 2013 - 6 nov. 2013 à 15:06
Bonjour,
j'ai deux petits(gros) problèmes qui me mettent bien de mauvaise humeur (et mes proches le ressentent x).

Je fonctionne sous Windows 8.1. 64 bits. Je suis le tutoriel de programmation Java sur le site du Zéro (devenu OpenClassrooms) et j'en suis à la deuxième partie sur la POO. J'ai écrit le programme, en deux classes : une classe objet Ville (avec deux trois commentaires pour retenir et préciser des trucs) :

public class Ville {
//Initions les variables d'instance de notre objet, de portée "private".
private String nomVille;
private String nomPays;
private int nombreHabitants;
private char catégorie;
//Portée :
//La portée "public" permet l'accès à un élément de code
//Depuis n'importe où dans ce code.
//"private" restreint l'accès, ca qui est nécessaire dans beaucoup de codes.

//Maintenant initions le constructeur
public Ville(){
System.out.println("\nUne ville vide est construite !");
nomVille = "?";
nomPays = "?";
nombreHabitants = 0;
//Le mot-clé "this"
//
this.setCatégorie();
//Un constructeur doit porter le même nom que la classe
//dans laquelle il se trouve.
//C'est une méthode qui ne renvoie rien et qui n'est pas void non plus.

}
public Ville(String pNom, int pNombre, String pPays)
{
System.out.println("\nUne ville est construite !");
nomVille = pNom;
nomPays = pPays;
nombreHabitants = pNombre;
this.setCatégorie();
}
//Les Accessseurs ou Getters
//Il permettent d'afficher des objets private dans la console.
//Ils commencent conventionellement par "get"

//Accesseur qui renvoie le nom de la ville.
public String getNom() {
return nomVille;
}

//Accesseur qui renvoie le nom du pays.
public String getPays(){
return nomPays;
}

//Accesseur qui renvoie le nombre d'habitants.
public int getNombreHabitants(){
return nombreHabitants;
}

//Accesseur qui renvoie la catégorie
public char getCatégorie(){
return catégorie;
}

//Les Mutateurs ou Setters
//Ils permmetent de chenger les données des objets dans le code.

public void setNom(String pNom){
nomVille = pNom;
}

public void setPays(String pPays){
nomPays = pPays;
}

public void setnombreHabitants(int pNombre){
nombreHabitants = pNombre;
}

private void setCatégorie(){
int rangs[] = {0,1_000,10_000,100_000,500_000,1_000_000,5_000_000,10_000_000};
char catégories[] = {'Z','A','B','C','D','E','F','G','H'};

int i = 0;
while(i< rangs.length && this.nombreHabitants >= rangs[i]);
i++;

this.catégorie = catégories[i];
}

//Pour ne pas retaper l'affichage dela description de la ville à chaque fois.
public String description(){
return "\t La ville "+this.nomVille+" se situe en "+this.nomPays+", "+this.nombreHabitants+" habitants y vivent. Elle est donc de catégorie "+this.catégorie;
}

//Pour comparer deux villes.
public String comparer(Ville v1){
String str = new String();

if(v1.getNombreHabitants()>this.nombreHabitants)
str = v1.getNom()+" est une ville plus peuplée que "+this.nomVille;

else
str = this.nomVille+" est une ville plus peuplée que "+v1.getNom();

return str;
}
}


Et également une classe main Sdz1, qui applique les différents éléments de la classe Ville :
public class Sdz1 {

	/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Ville ville1 = new Ville("Maisons-Laffitte",25000, "France");
Ville ville2 = new Ville("Paris",10_000_000, "France");
Ville ville3 = new Ville();

System.out.println("\n La ville ville1 se nomme "+ville1.getNom()+ " et "+ville1.getNombreHabitants()+" habitants y vivent. Elle se situe en "+ville1.getPays()+".");
System.out.println(" La ville ville2 se nomme "+ville2.getNom()+" et "+ville2.getNombreHabitants()+" habitants y vivent. Elle se situe en "+ville2.getPays()+".");
//La ville 3 est une ville vide, elle conserve les valeurs private.
System.out.println(" La ville ville3 se nomme "+ville3.getNom()+" et "+ville3.getNombreHabitants()+" habitants y vivent. Elle se situe en "+ville3.getPays()+"." );

//Et enfin utilisons les mutateurs
ville1.setNom("UltraLol");
ville1.setnombreHabitants(5456);
ville1.setPays("Océanie");

System.out.println("\n La ville ville1 se nomme désormais "+ville1.getNom()+" et "+ville1.getNombreHabitants()+ " habitants y vivent. Elle se situe en "+ville1.getPays()+".");

Ville V = new Ville("Lion", 654, "Soudan");
Ville V2 = new Ville ("L'île", 478, "Caraïbes");


}

}

Problème : lorsque le programme se lance dans la console, il exécute la première commande et affiche "Une ville est construite !", mais ensuite, plus rien. Au début, j'ai cru que le problème venait d'Eclipse, j'ai donc installé NetBeans pour tester : même problème.


Mon deuxième problème : j'ai installé Java 64 bits sur mon ordi, mais les applications tournent avec la version 32bits ! Je cherche à désinstaller la version 32bits pour ne laisser que la 64bits, mais je ne trouve qu'un dossier java, et rien n'indique la version. Bref, autant de problèmes qui m'énervent et que j'aimerais régler.

Merci et bonne journée !

A voir également:

2 réponses

arth Messages postés 9374 Date d'inscription mardi 27 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2016 1 291
Modifié par arth le 6/11/2013 à 15:15
Bonjour,

Sur un système 64 bits, certaines applications nécessitent java en 32 bits, donc il faut le laisser installer. Le désinstaller fera que ces applications ne fonctionneront tout simplement pas.

Ensuite, ce n'est pas la seule chose que fait ce programme. Il en fait même beaucoup de choses.

Mais pourquoi n'affiche-t-il que la première ligne?

Mais c'est simple. Quand on crée la première ville, on utilise le constructeur avec paramètres. A la fin du constructeur, il y a la fonction setCategorie()

Dans cette même fonction, tu as utilisé un WHILE, sauf que le WHILE est terminé par un ; => while(i< rangs.length && this.nombreHabitants >= rangs[i]);

Donc, comme i n'est jamais incrémenté vu qu'il n'est pas dans le WHILE, alors le programme tourne en boucle de façon infini. On pourrait le laisser tourner longtemps comme ça.

Donc il faut supprimer ce ; à la fin de ce while

Autre chose, et à moins que je ne sache pas, comme ce sont des entiers, à quoi servent les _ ?

Le loup, solitaire et mystérieux.
1
Black n' Sad Messages postés 3 Date d'inscription mercredi 6 novembre 2013 Statut Membre Dernière intervention 22 novembre 2013
6 nov. 2013 à 15:06
Merci pour ton aide !

Et pour répondre à ta question, les underscores _ servent à différencier plus facilement les différentes parties d'un nombre à rallonge (du genre 100000000000000, en écrivant 100_000_000_000_000 c'est beaucoup plus clair).

Je sais que la programmation Java ne sert pas qu'à la POO, mais j'apprends et ne pas pouvoir expérimenter dans tel ou tel domaine, ça me frustre.
0