Valeur de retour toujours égale à zéro

Fermé
MikaelLahlou - 25 sept. 2008 à 21:56
Enax Messages postés 203 Date d'inscription lundi 11 février 2008 Statut Membre Dernière intervention 16 mars 2010 - 26 sept. 2008 à 11:27
Bonjour,
exusez moi pour le dérangement,
j'ai programmé une fonction qui calcule les diviseurs d'un entier rentré en paramètre, seulement voilà, la valeur est toujours zéro, j'ai remarqué ça aussi dans différentes fonctions auquel je n'affecte pas de type de retour simplifié, auquel je mets un void tout simplement, pouvez vous m'indiquez où est l'erreur? et, le cas échéant, comment faire pour la résoudre, merci beaucoup,
bonne soirée;
voici le code :
import javax.swing.JOptionPane;


public class Diviseurs {



public static int[] chercherDiviseur(int nombre , int[] tableauStockage) {
int [] tableau = new int[nombre];
int indice = 0;
tableauStockage = new int[nombre];
int i = 1;
while(i <= nombre) {
if(nombre % i == 0) {

tableauStockage[indice] = i;
indice++;
}
i++;

}
tableau = tableauStockage;
return tableau;

}

public static void main(String args[]) {

String entree = JOptionPane.showInputDialog("veuillez entrer un nombre !");
int nbre = Integer.parseInt(entree);
int tabStoc[] = new int[nbre];
int [] tableau = new int[nbre];
tableau = chercherDiviseur(nbre , tabStoc);
for(int i = 0; i< nbre ; i++) {

System.out.println(tableau[i]);
}



}
}
A voir également:

1 réponse

Enax Messages postés 203 Date d'inscription lundi 11 février 2008 Statut Membre Dernière intervention 16 mars 2010 145
26 sept. 2008 à 11:27
Salut,

Ton code fonctionne bien. C'est juste que ton tableau fait la taille du nombre saisi et est donc bien plus grand que le nombre de diviseurs. Du coup, ça affiche plein de zéros. Pour cela, tu peux utiliser une collection qui est dynamique.
Tu as également des variables inutiles : tabStoc dans main et tableau dans chercherDiviseur.
Une dernière petite chose, au niveau de la logique, au delà de nombre / 2 le seul diviseur est nombre lui même. Donc il est plus rapide d'arrêter la boucle à nombre / 2 et de rajouter nombre ensuite.

import java.util.ArrayList;
import javax.swing.JOptionPane;

public class Diviseurs
{
	public static ArrayList<Integer> chercherDiviseur(int nb)
	{
		ArrayList<Integer> diviseurs = new ArrayList<Integer>();
		int diviseur = 1;
		
		while(diviseur <= nb / 2)
		{
			if(nb % diviseur == 0)
			{
				diviseurs.add(diviseur);
			}
			
			diviseur++;
		}
		
		diviseurs.add(nb);

		return diviseurs;
	}
	
	public static void main(String args[])
	{
		String entree = JOptionPane.showInputDialog("veuillez entrer un nombre !");
		int nb = Integer.parseInt(entree);
		
		ArrayList<Integer> diviseurs = chercherDiviseur(nb);
		
		for (int indice = 0 ; indice < diviseurs.size() ; indice++)
		{
			System.out.println(diviseurs.get(indice));
		}
	}
}
0