Scanf en java pour les tableaux

Résolu/Fermé
khk
Messages postés
46
Date d'inscription
mercredi 2 janvier 2013
Statut
Membre
Dernière intervention
11 juin 2013
- Modifié par jipicy le 2/01/2013 à 16:59
khk
Messages postés
46
Date d'inscription
mercredi 2 janvier 2013
Statut
Membre
Dernière intervention
11 juin 2013
- 11 janv. 2013 à 13:30
Bonjour,
quel est l'équivalent de scanf en java (je veux que l'utilisateur me donne les valeures d'un tableau)
s'il vous plait


A voir également:

5 réponses

KX
Messages postés
16584
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
12 août 2022
2 972
2 janv. 2013 à 17:12
Contrairement au printf qui existe en Java, il n'y a pas d'équivalent pour scanf, pour la simple raison qu'en C/C++ les paramètres du scanf sont des pointeurs, alors qu'en Java on n'a qu'un passage par valeur qui ne permet pas de modifier les arguments.
Remarque : de toute façon le scanf ne s'applique pas à des tableaux, il faudrait - comme en Java - décomposer la lecture avec une boucle.

Bref, pour lire une entrée en Java, tu peux te servir de la classe Scanner :

Scanner clavier = new Scanner(System.in);

String[] tab = new String[5];

for (int i=0; i<tab.length; i++)
{
    System.out.printf("tab[%d]=",i);
    tab[i] = clavier.nextLine();
}
2
3IR3
Messages postés
864
Date d'inscription
mercredi 27 octobre 2010
Statut
Membre
Dernière intervention
25 avril 2022
223
2 janv. 2013 à 17:02
1
khk
Messages postés
46
Date d'inscription
mercredi 2 janvier 2013
Statut
Membre
Dernière intervention
11 juin 2013

2 janv. 2013 à 19:46
Merci beaucoup d'avoir repondu, mais cela ne marche toujours pas, je vous explique un peu la chose :
import java.util.Scanner;
class Personne
{
String nom;
int age;

double [] Comptes;
Personne(String leNom, int lAge){
nom = leNom;
age = lAge;
}
void scanf ()
{
Scanner sc = new Scanner(System.in);

System.out.println ("introduire la taille du tableau:" );
int T = sc.nextInt ();

for (int i=0; i<T; i++)
{
System.out.printf("introduire le solde du compte [%d]=",i);
Comptes[i] = sc.nextDouble();
sc.nextDouble();
}
}
}
voila mon code, et j'apelle cette methode dans le programme main qui est:
import java.*;
public class PersonneMain
{
public static void main(String args[])
{
Personne P= new Personne ("Vicent", 25) ;
P.scanf();

quand je compile il me fait une iteration pui affiche une erreur :s
voila ce qu'il m'affiche:
introduire la taille du tableau:
5
introduire le solde du compte[0]:1
Exception in thread "main" java.lang.NullPointerException
at Personne.scanf <personne.java:24>
at PersonneMain.main<PersonneMain.java:7>
Press any key to continue...
0
KX
Messages postés
16584
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
12 août 2022
2 972
2 janv. 2013 à 19:51
Dans mon exemple j'ai alloué mon tableau en mémoire :

String[] tab = new String[5];

Mais toi, tu n'as pas fait cela avec ton tableau double[] Comptes;

Tu devrais faire :
System.out.println ("introduire la taille du tableau:" );
int T = sc.nextInt ();
Comptes = new double[T];

Remarque : les noms de variables et d'objets (T, Comptes, etc.) devraient commencer par une lettre minuscule (t, comptes, etc.). On réserve les majuscules aux noms de classes.
0
khk
Messages postés
46
Date d'inscription
mercredi 2 janvier 2013
Statut
Membre
Dernière intervention
11 juin 2013

2 janv. 2013 à 20:26
Mille merci a vous, ça marche enfin ..merci merci merci encore
0

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

Posez votre question
khk
Messages postés
46
Date d'inscription
mercredi 2 janvier 2013
Statut
Membre
Dernière intervention
11 juin 2013

2 janv. 2013 à 21:36
et zut, encore une chose SVP, je voudrais ajouté le tableau Comptes dans le constructeur et ensuite l'appeler dans le programme princiaple, j'ai essayé pleins de choses mais rien n'y fait.
0
KX
Messages postés
16584
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
12 août 2022
2 972
2 janv. 2013 à 21:57
Exemple :

public class Personne
{
    private String nom;
    private int age;
    private double[] comptes;
    
    private final static Scanner sc = new Scanner(System.in);
    
    public Personne(String nom, int age, double[] comptes)
    {
        this.nom = nom;
        this.age = age;
        this.comptes = comptes;
    }
    
    public static double[] lireCompte()
    {
        System.out.print("Introduire la taille du tableau : ");
        
        int n = sc.nextInt();
        double[] tab = new double[n];
        
        for (int i=0; i<n; i++)
        {
            System.out.printf("Introduire le solde du compte [%d]=",i);
            tab[i] = sc.nextDouble(); sc.nextLine();
        }
        
        return tab;
    }
}

public class PersonneMain
{
    public static void main(String[] args)
    {
        double[] comptes = Personne.lireCompte();
        Personne p = new Personne ("Vicent", 25,comptes);
    }
}
0
khk
Messages postés
46
Date d'inscription
mercredi 2 janvier 2013
Statut
Membre
Dernière intervention
11 juin 2013

2 janv. 2013 à 23:28
Merci infiniment..bonne nuit
0
khk
Messages postés
46
Date d'inscription
mercredi 2 janvier 2013
Statut
Membre
Dernière intervention
11 juin 2013

3 janv. 2013 à 19:40
bonsoir,
j'ai ajouté la méthode suivante à la classe Personne :
void diviserParDeux ()
{
for (int i =0; i<comptes.length; i++)
{
comptes [i] = comptes [i] /2 ;
System.out.println("le nouveau solde du compte " + i +" est " +comptes [i]);
}
}
mais je ne veux pas que les valeurs du tableau soient ecrasées et quand j'essaye de faire ceci :
void diviserParDeux ()
{
double [] cptes;
for (int i =0; i<comptes.length; i++)
{
cptes [i] = comptes [i] /2 ;
System.out.println("le nouveau solde du compte " + i +" est " +cptes [i]);
}
}
il y a une erreur de compilation disant : variable cptes might not have been initialized
Et je ne sais pas dutout comment l'initialiser ou régler ce probléme
0
KX
Messages postés
16584
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
12 août 2022
2 972
3 janv. 2013 à 20:19
De la même manière que les initialisations d'hier :
cptes = new double[n];
Vu ton code, je dirais que
n >= comptes.length
0
khk
Messages postés
46
Date d'inscription
mercredi 2 janvier 2013
Statut
Membre
Dernière intervention
11 juin 2013

11 janv. 2013 à 12:55
bonjour KX, on me demande ceci:
Au sein de la classe Personne, créer un constructeur par défaut, de signature Personne()
appelant le constructeur exhaustif Personne(String leNom, int lAge ) au moyen du mot clé this et initialisant respectivement les champs
nom et age à "Didier" et 30. et je ne sais pas comment faire, help please
0