你好?请这是我在Java中的代码,它有效,但单词的分类不会出现在控制台中:
所以,我正在锻炼这些练习,以便莫特·肖特(Methode(shoulb是私人的,但我想知道我是否在某个地方失败了
package packageSdz1;
// portée de la classe : public
/* private : méthode utilisée
*que dans la classe où elle est mentionnée
public class Ville {
*/
public class Ville {
// public sans ajout de portée
//Les variables de classe : celles-ci sont communes à
//toutes les instances de votre classe.
private String nomVille;
private String nomPays;
private int nbreHabitants;
private char categorie;
//Variables publiques qui comptent les instances
public static int nbreInstances = 0;
//Variable privée qui comptera aussi les instances
private static int nbreInstancesBis = 0;
//Constructeur par défaut , es variables d'instance : ce sont elles
// qui définiront les caractéristiques de notre objet.
public Ville(){
System.out.println("Création d'une ville !");
nomVille = "Inconnu";
nomPays = "Inconnu";
nbreHabitants = 0;
//On incrémente nos variables à chaque appel aux constructeurs
nbreInstances++;
nbreInstancesBis++;
//Le reste ne change pas.
}
//Constructeur avec paramètres
//J'ai ajouté un « p » en première lettre des paramètres.
//Ce n'est pas une convention, mais ça peut être un bon moyen de les repérer.
public Ville(String pNom, int pNbre, String pPays)
{
System.out.println("Création d'une ville avec des paramètres !");
nomVille = pNom;
nomPays = pPays;
nbreHabitants = pNbre;
nbreInstances++;
nbreInstancesBis++;
}
//************* ACCESSEURS *************
public static int getNombreInstancesBis()
{
return nbreInstancesBis;
}
//Le reste du code est le même qu'avant
//Retourne le nom de la ville
public String getNom() {
return nomVille;
}
//Retourne le nom du pays
public String getNomPays()
{
return nomPays;
}
// Retourne le nombre d'habitants
public int getNombreHabitants()
{
return nbreHabitants;
}
//Retourne la catégorie de la ville
public char getCategorie()
{
return categorie;
}
//************* MUTATEURS *************
//Définit le nom de la ville
public void setNom(String pNom)
{
nomVille = pNom;
}
//Définit le nom du pays
public void setNomPays(String pPays)
{
nomPays = pPays;
}
//Définit le nombre d'habitants
public void setNombreHabitants(int nbre)
{
nbreHabitants = nbre;
this.setCategorie();
}
//*******************************
//Définit la catégorie de la ville
private void setCategorie() {
int bornesSuperieures[] = {0, 1000, 10000, 100000, 500000, 1000000, 5000000, 10000000};
char categories[] = {'?', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H'};
int i = 0;
while (i < bornesSuperieures.length && this.nbreHabitants > bornesSuperieures[i])
i++;
this.categorie = categories[i];
}
//Retourne la description de la ville
public String decrisToi(){
return "t"+this.nomVille+" est une ville de "+this.nomPays+ ", elle comporte : "
+this.nbreHabitants+" habitant(s) => elle est donc de catégorie : "+this.categorie;
}
//Retourne une chaîne de caractères selon le résultat de la comparaison
public String comparer(Ville v1){
String str = new String();
if (v1.getNombreHabitants() > this.nbreHabitants)
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;
}
}
和
Ville v = new Ville();
Ville v1 = new Ville("Marseille", 123456, "France");
Ville v2 = new Ville("Rio", 321654, "Brésil");
System.out.println("nn"+v1.decrisToi());
System.out.println(v.decrisToi());
System.out.println(v2.decrisToi()+"nn");
System.out.println(v1.comparer(v2));
您知道为什么,分类不会出现在结果中?
Création d'une ville !
Création d'une ville avec des paramètres !
Création d'une ville avec des paramètres !
Marseille est une ville de France, elle comporte : 123456 habitant(s) => elle est donc de catégorie :
您从不调用setCategorie()
。
尝试将构造函数调整为:
public Ville(String pNom, int pNbre, String pPays) {
System.out.println("Création d'une ville avec des paramètres !");
nomVille = pNom;
nomPays = pPays;
nbreHabitants = pNbre;
// Add this !!!
setCategorie();
nbreInstances++;
nbreInstancesBis++;
}
尽管一个更好的解决方案是没有categorie
实例变量,因为它仅取决于nbreHabitants
,因此您可以最好地做到:
//Retourne la catégorie de la ville
public char getCategorie() {
int bornesSuperieures[] = {0, 1000, 10000, 100000, 500000, 1000000, 5000000, 10000000};
char categories[] = {'?', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H'};
int i = 0;
while (i < bornesSuperieures.length && this.nbreHabitants > bornesSuperieures[i])
i++;
return categories[i];
}
您的问题在于您永远不会调用 setCategorie((,因此 cancorie char永远不会初始化。您可以在该方法的构造函数中调用此功能,以确保 cancorie 在调用 dectistoi((。。
时具有值。。您还必须在下面的方法 setCategorie((中更改WARE循环,以确保当 nbrehabitants 为0 cancorie 时仍然被初始化。确保您将 i 添加设置 epcorie 。
while (i < bornesSuperieures.length && this.nbreHabitants >= bornesSuperieures[i])
作为将来的提示,请尝试为您的代码使用标准格式,以便易于阅读!大多数IDE都可以很容易地为您做。