Must be caught java error debutant

Résolu/Fermé
findizy Messages postés 65 Date d'inscription jeudi 20 mars 2008 Statut Membre Dernière intervention 16 août 2011 - 31 oct. 2009 à 10:57
findizy Messages postés 65 Date d'inscription jeudi 20 mars 2008 Statut Membre Dernière intervention 16 août 2011 - 31 oct. 2009 à 14:46
Bonjour,

Je suis débutant en java. Je voudrais faire un programme qui compte le nombre de diviseurs entiers d'un nombre n (entier positif). Je teste les diviseurs dans cet ordre : n, n-1, ... jusqu'à 1.

A la compilation j'ai 1 erreur, je l'ai mise en gras/souligné en commentaires dans mon code
Merci d'avance.

Voici mon code:

import objetMathematique.*;
import ordinateur.*;


class exind4_103

{

public static int compterDiviseursEntiers( int i, int j )
	{
	
	int n = 0;
	j = n;
	int m;
	for(i = 0; n != 1; m = n / j)
		{
			if(n % j == 0)
			{ 
			i = i + 1;
			j = n - 1;
			}
			else
			{ 
			j = n - 1;		
			}	
		}
	return i;
	}

public static void main( String [] args )
	{
	int i = 0;
	int j = 0;
	int m = 0;
	int n;
	System.out.println("Veullez entrer la valeur de n desiree.");
	n = System.in.read();                // unreported exception java.io.IOException; must be caught or declared to be trown //
	compterDiviseursEntiers(i,j);
	System.out.println("Voici le nombre de diviseurs entiers du nombre n choisi"+i);
	}
}
A voir également:

18 réponses

Dynamix Messages postés 202 Date d'inscription dimanche 22 mars 2009 Statut Membre Dernière intervention 30 avril 2011 76
31 oct. 2009 à 13:01
Et avec la classe Scanner?

Scaner entree = new (System.in);
System.out.println("Veullez entrer la valeur de n desiree.");
n = entree.nextInt();


Sinon essaye d'attraper l'exception :

try {
n = System.in.read();
} catch (IOException e) { }
0
findizy Messages postés 65 Date d'inscription jeudi 20 mars 2008 Statut Membre Dernière intervention 16 août 2011 1
31 oct. 2009 à 13:07
avec try/catch ca compile mais quand j'execute, apres avoir entrer la valeur de n, plus rien ne se passe.

Je me demande si il n'y a pas une erreur dans mon code...

merci d'avance
0
Dynamix Messages postés 202 Date d'inscription dimanche 22 mars 2009 Statut Membre Dernière intervention 30 avril 2011 76
31 oct. 2009 à 13:13
T'as essayé avec la classe Scanner?
0
findizy Messages postés 65 Date d'inscription jeudi 20 mars 2008 Statut Membre Dernière intervention 16 août 2011 1
31 oct. 2009 à 13:18
Eh bien je suis censé utilisé uniquement les outils vu pendant mon cours d'algorithmique. je n'ai vu ni Try/Catch, ni la classe scanner.

Donc je voudrais savoir si en modifiant mon code, je peux contourner l'exeption et ainsi ne plus devoir utiliser try/catch ou bien scanner...

C'est un peu compliqué mais j'espere que je suis clair... :S

merci d'avance
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Dynamix Messages postés 202 Date d'inscription dimanche 22 mars 2009 Statut Membre Dernière intervention 30 avril 2011 76
31 oct. 2009 à 13:20
Est-ce que ça serait lié à ta classe ordinateur?
0
findizy Messages postés 65 Date d'inscription jeudi 20 mars 2008 Statut Membre Dernière intervention 16 août 2011 1
31 oct. 2009 à 13:33
oui c'est possible, on a déja utiliser cette classe pour faire des trucs du genre:

clavier.lireSuiteDeChiffres ou des trucs comme ca ...

on a vu system.out.print donc pour lire un int j'ai utiliser system.in.read ...
0
Dynamix Messages postés 202 Date d'inscription dimanche 22 mars 2009 Statut Membre Dernière intervention 30 avril 2011 76
31 oct. 2009 à 13:35
Tu peux copier la source de la classe ordinateur?
0
findizy Messages postés 65 Date d'inscription jeudi 20 mars 2008 Statut Membre Dernière intervention 16 août 2011 1
31 oct. 2009 à 13:40
ya du nouveau : en fait je peux utiliser : clavier.lireUnInt();

mais mon programme s'arrete toujours un fois que j'ai entrer ma valeur pour n.

le nouveau code:

import objetMathematique.*;
import ordinateur.*;


class exind4_103

{

public static int compterDiviseursEntiers( int i, int j ) 
	{
	int n = 0;
	int m = 0;
	
	for(i = 0; n != 1; m = n % j)
		{
			
			if(m == 0)
			{ 
			i = i + 1;
			j = n - 1;
			}
			else
			{ 
			j = n - 1;		
			}	
		}
	return i;
	}

public static void main( String [] args )
	{
	int i = 0;
	int j = 0;
	int n;	
	System.out.println("Veullez entrer la valeur de n desiree.");
	n = clavier.lireUnInt();
	compterDiviseursEntiers(i,j);
	System.out.println("Voici le nombre de diviseurs entiers du nombre n choisi"+i);
	}
}
0
Dynamix Messages postés 202 Date d'inscription dimanche 22 mars 2009 Statut Membre Dernière intervention 30 avril 2011 76
31 oct. 2009 à 13:57
Il faudrait toujours le code source où t'as écrit lireUnInt le problème vient sûrement de là.
0
findizy Messages postés 65 Date d'inscription jeudi 20 mars 2008 Statut Membre Dernière intervention 16 août 2011 1
31 oct. 2009 à 13:59
comment je peux trouver ce code source ?
c'est dans le .jar ?
0
Dynamix Messages postés 202 Date d'inscription dimanche 22 mars 2009 Statut Membre Dernière intervention 30 avril 2011 76
31 oct. 2009 à 14:00
Non normalement t'as un fichier ordinateur.java.
0
findizy Messages postés 65 Date d'inscription jeudi 20 mars 2008 Statut Membre Dernière intervention 16 août 2011 1
31 oct. 2009 à 14:03
et il est cencé se trouver où se fichier? moi je ne l'ai pas créer et je ne le trouve pas en faisant une recherche.

En fait notre prof nous a donner un ficher .jar avec les classes qu'on aurait besoin pour faire nos programmes...
0
Dynamix Messages postés 202 Date d'inscription dimanche 22 mars 2009 Statut Membre Dernière intervention 30 avril 2011 76
31 oct. 2009 à 14:08
Y aura pas une boucle infinie dans compterDiviseursEntiers par hasard?
Ton algorithme me semble bizarre, essaye en mettant un System.out.print dans le for.
0
findizy Messages postés 65 Date d'inscription jeudi 20 mars 2008 Statut Membre Dernière intervention 16 août 2011 1
31 oct. 2009 à 14:13
bien vu ... j'ai fait un system.out.print("test");
=> boucle infinie....

Comment je peux arranger ca ?

je veux que tant que j est différent de 1, si n modulo j vaut 0 on ajoute 1 a i (qui est le nombre de diviseurs entiers) et puis on enleve 1 à j.
Sinon on enleve juste 1 à j et on recommence.

J'ai surement du me planter quelque part dans mon code.
0
Dynamix Messages postés 202 Date d'inscription dimanche 22 mars 2009 Statut Membre Dernière intervention 30 avril 2011 76
31 oct. 2009 à 14:19
int n = 0;
Déjà là il y a un problème, ton résultat dépend de n et tu initialises une variable n à 0 qui, en plus, n'est pas la même.

compteurDiviseur(int n) {

int compteur = 0; // Le compteur des diviseurs
for(int i=n, i>1, i--) {
if(n%i == 0) {
compteur++;
}
}
return compteur;

}
Essaye quelque chose chose comme ça.
0
findizy Messages postés 65 Date d'inscription jeudi 20 mars 2008 Statut Membre Dernière intervention 16 août 2011 1
31 oct. 2009 à 14:27
Ca fonctionne, merci beaucoup.
C'est toujours la même chose avec moi... je pars dans un truc trop compliqué et donc je fais des fautes, Alors que la solution est plus facile...

Merci beaucoup en tout cas.
0
Dynamix Messages postés 202 Date d'inscription dimanche 22 mars 2009 Statut Membre Dernière intervention 30 avril 2011 76
31 oct. 2009 à 14:29
La conception c'est toujours ce qu'il y a de plus important. Toujours réfléchir à fond avant de se lancer dans le codage, ne pas hésiter à faire des dessins etc...

Derien, content de t'avoir aidé ;)
0
findizy Messages postés 65 Date d'inscription jeudi 20 mars 2008 Statut Membre Dernière intervention 16 août 2011 1
31 oct. 2009 à 14:46
J'y penserai pour la prochaine fois... je me suis peut etre lancé trop vite dans l'aventure^^

Merci encore pour ton aide précieuse.

Je classe le sujet comme résolu.

au revoir
0