A voir également:
- Question thread java
- Waptrick java football - Télécharger - Jeux vidéo
- Jeux java itel football - Télécharger - Jeux vidéo
- Java apk - Télécharger - Langages
- Java décompiler - Télécharger - Langages
- Jeux java itel - Forum Mobile
6 réponses
KX
Messages postés
16753
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
25 novembre 2024
3 019
9 sept. 2011 à 21:19
9 sept. 2011 à 21:19
Donne le code qui t'affiche ça pour voir...
la classe capteur:
import java.util.Random;
public class Capteur extends Thread {
static public int chanel;
int i=0;
static int temperature ;
private static Random rand = new Random(System.currentTimeMillis());
static int lindat2;
public Capteur() {
// TODO Auto-generated constructor stub
}
public int EnvoyerValeureTemperature(Controleur C)
{
C.chanel=temperature;
return C.chanel;
}
public void run() {
try{
{
System.out.println( "la valeure de la température :"+ (rand.nextInt()));
temperature=(int) (Math.random()*60);
chanel= temperature;
System.out.println( "le delai : " + (int) (Math.random()*100) );
sleep( 5000);
}
}
catch(InterruptedException e)
{
}
}
}
la classe collecteur:
class Collecteur extends Thread
{
String[] chaineReponse = new String [3];
public Collecteur(String[] Tableau)
{
chaineReponse=new String [3];
chaineReponse[0]=Tableau[0];
chaineReponse[1]=Tableau[1];
chaineReponse[2]=Tableau[2];
}
public void run()
{
synchronized(System.out)
{
if(this.chaineReponse[0].contentEquals("ALarme température")==false
|| this.chaineReponse[1].contentEquals("ALarme température")==false|| this.chaineReponse[2].contentEquals("ALarme température")==false)
{
System.out.println("couleur rouge");
}
else if(chaineReponse[0].compareTo("défaillance")==0 ||
chaineReponse[1].compareTo("défaillance")==0 ||
chaineReponse[2].compareTo("défaillance")==0 &&
chaineReponse[0].compareTo("défaillance")==1 ||
chaineReponse[2].compareTo("défaillance")==1 ||
chaineReponse[3].compareTo("défaillance")==1
&&
chaineReponse[1].compareTo("Alarme température")==1 ||
chaineReponse[2].compareTo("Alarme température")==1 ||
chaineReponse[3].compareTo("Alarme température")==1)
{
System.out.println("couleur orangé");
}
else
{
System.out.println("couleur verte");
}
try {
sleep(500);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} }
}
}
et la classe controleur
import java.util.Random;
public class Controleur extends Thread {
static int chanel;
public String chaineReponse;
String[] chainedesReponses = new String [3];
private static final int deltat=400;
private final int seuil=56;
Capteur C1 , C2 , C3 , C4 ;
int[] temperature = new int [4];
int[] delai =new int[4];
public Controleur(int [] tableau, int[] tableau2)
{
for(int i=0;i<4; i++)
{
temperature[i]=tableau[i];
}
for(int i=0;i<4; i++)
{
delai[i]=tableau2[i];
}
}
public Controleur()
{
}
public void run()
{
Collecteur c;
try {
if (this.delai[0]<deltat && this.delai[1]<deltat && this.delai[2]<deltat && this.delai[3]<deltat)
{
if(this.temperature[0]==this.temperature[1] && this.temperature[0]==this.temperature[2] && this.temperature[0]==this.temperature[3] && this.temperature[0]<seuil)
{
System.out.println("c'est bien");
this.chaineReponse="température-normale";
System.out.println(this.chaineReponse);
}
else if (this.temperature[1]>=seuil)
{
System.out.println("c'est bien");
this.chaineReponse="Alarme température";
System.out.println(this.chaineReponse);
}
else
System.out.println("défaillance");
this.chaineReponse="défaillance";
System.out.println(this.chaineReponse);
}
sleep(deltat);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
import java.util.Random;
public class Capteur extends Thread {
static public int chanel;
int i=0;
static int temperature ;
private static Random rand = new Random(System.currentTimeMillis());
static int lindat2;
public Capteur() {
// TODO Auto-generated constructor stub
}
public int EnvoyerValeureTemperature(Controleur C)
{
C.chanel=temperature;
return C.chanel;
}
public void run() {
try{
{
System.out.println( "la valeure de la température :"+ (rand.nextInt()));
temperature=(int) (Math.random()*60);
chanel= temperature;
System.out.println( "le delai : " + (int) (Math.random()*100) );
sleep( 5000);
}
}
catch(InterruptedException e)
{
}
}
}
la classe collecteur:
class Collecteur extends Thread
{
String[] chaineReponse = new String [3];
public Collecteur(String[] Tableau)
{
chaineReponse=new String [3];
chaineReponse[0]=Tableau[0];
chaineReponse[1]=Tableau[1];
chaineReponse[2]=Tableau[2];
}
public void run()
{
synchronized(System.out)
{
if(this.chaineReponse[0].contentEquals("ALarme température")==false
|| this.chaineReponse[1].contentEquals("ALarme température")==false|| this.chaineReponse[2].contentEquals("ALarme température")==false)
{
System.out.println("couleur rouge");
}
else if(chaineReponse[0].compareTo("défaillance")==0 ||
chaineReponse[1].compareTo("défaillance")==0 ||
chaineReponse[2].compareTo("défaillance")==0 &&
chaineReponse[0].compareTo("défaillance")==1 ||
chaineReponse[2].compareTo("défaillance")==1 ||
chaineReponse[3].compareTo("défaillance")==1
&&
chaineReponse[1].compareTo("Alarme température")==1 ||
chaineReponse[2].compareTo("Alarme température")==1 ||
chaineReponse[3].compareTo("Alarme température")==1)
{
System.out.println("couleur orangé");
}
else
{
System.out.println("couleur verte");
}
try {
sleep(500);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} }
}
}
et la classe controleur
import java.util.Random;
public class Controleur extends Thread {
static int chanel;
public String chaineReponse;
String[] chainedesReponses = new String [3];
private static final int deltat=400;
private final int seuil=56;
Capteur C1 , C2 , C3 , C4 ;
int[] temperature = new int [4];
int[] delai =new int[4];
public Controleur(int [] tableau, int[] tableau2)
{
for(int i=0;i<4; i++)
{
temperature[i]=tableau[i];
}
for(int i=0;i<4; i++)
{
delai[i]=tableau2[i];
}
}
public Controleur()
{
}
public void run()
{
Collecteur c;
try {
if (this.delai[0]<deltat && this.delai[1]<deltat && this.delai[2]<deltat && this.delai[3]<deltat)
{
if(this.temperature[0]==this.temperature[1] && this.temperature[0]==this.temperature[2] && this.temperature[0]==this.temperature[3] && this.temperature[0]<seuil)
{
System.out.println("c'est bien");
this.chaineReponse="température-normale";
System.out.println(this.chaineReponse);
}
else if (this.temperature[1]>=seuil)
{
System.out.println("c'est bien");
this.chaineReponse="Alarme température";
System.out.println(this.chaineReponse);
}
else
System.out.println("défaillance");
this.chaineReponse="défaillance";
System.out.println(this.chaineReponse);
}
sleep(deltat);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
KX
Messages postés
16753
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
25 novembre 2024
3 019
9 sept. 2011 à 22:14
9 sept. 2011 à 22:14
Plusieurs remarques et erreurs potentielles :
* class Capteur
Dans envoyerValeureTemperature(Controleur c)
chanel est static donc si tu modifies C.chanel tu modifies la valeur de chanel pour tous les objets
* class Collecteur
Dans run, avec tous tes String, tu dois utiliser des constantes, une petite faute de frappe et ton programme est totalement faux, par exemple tu écris de deux manières "Alarme température", parfois avec L minuscule, et parfois avec un L majuscule !
Remarque : equals, est plus approprié que contentEquals
De plus tu mélange les || et les && alors qu'il te faut une forme normale et donc rajouter des parenthèses.
Enfin, compareTo renvoie un nombre positif, négatif ou nul, mais ce n'est pas nécessairement 1 et -1, ça peut très bien être 3, -2... De plus je ne vois pas pourquoi l'ordre lexicographique interviendrait ici
* class Controleur
Idem pour les constantes de String, d'autant que ce sont les même, il faut qu'il y ait correspondance absolue pour pouvoir les comparer, sinon ça ne sert à rien !
De plus pour le else final, tu as il me semble oublié les accolades.
Voilà tout ça c'est "juste" les erreurs que je vois d'emblée, sans même avoir besoin de réfléchir à ce que tu fais (ou essaye de faire). En particulier j'ai pas du tout regardé où étaient les thread, s'ils étaient protégés, qui appelle qui etc... De toute façon je n'ai pas la méthode main pour tester !
Bref, il te reste pas mal de boulot ! Mais les erreurs les plus évidentes sont dans toutes mes explications au-dessus... Bon courage pour la suite !
* class Capteur
Dans envoyerValeureTemperature(Controleur c)
chanel est static donc si tu modifies C.chanel tu modifies la valeur de chanel pour tous les objets
* class Collecteur
Dans run, avec tous tes String, tu dois utiliser des constantes, une petite faute de frappe et ton programme est totalement faux, par exemple tu écris de deux manières "Alarme température", parfois avec L minuscule, et parfois avec un L majuscule !
Remarque : equals, est plus approprié que contentEquals
De plus tu mélange les || et les && alors qu'il te faut une forme normale et donc rajouter des parenthèses.
Enfin, compareTo renvoie un nombre positif, négatif ou nul, mais ce n'est pas nécessairement 1 et -1, ça peut très bien être 3, -2... De plus je ne vois pas pourquoi l'ordre lexicographique interviendrait ici
* class Controleur
Idem pour les constantes de String, d'autant que ce sont les même, il faut qu'il y ait correspondance absolue pour pouvoir les comparer, sinon ça ne sert à rien !
De plus pour le else final, tu as il me semble oublié les accolades.
Voilà tout ça c'est "juste" les erreurs que je vois d'emblée, sans même avoir besoin de réfléchir à ce que tu fais (ou essaye de faire). En particulier j'ai pas du tout regardé où étaient les thread, s'ils étaient protégés, qui appelle qui etc... De toute façon je n'ai pas la méthode main pour tester !
Bref, il te reste pas mal de boulot ! Mais les erreurs les plus évidentes sont dans toutes mes explications au-dessus... Bon courage pour la suite !
import java.util.Random; class Commun { public static final String TEMPERATURE_NORMAL = "Température normale"; public static final String ALARME_TEMPERATURE = "Alarme température"; public static final String DEFAILLANCE = "Défaillance"; } class Capteur extends Thread { static public int chanel; int i=0; static int temperature ; private static Random rand = new Random(System.currentTimeMillis()); static int lindat2; public int EnvoyerValeureTemperature(Controleur C) { C.chanel=temperature; // TODO return C.chanel; // TODO } @Override public void run() { try { System.out.println("la valeure de la température : "+ (rand.nextInt())); temperature=(int) (Math.random()*60); chanel= temperature; System.out.println("le delai : " + (int) (Math.random()*100) ); sleep(5000); } catch(InterruptedException e) { e.printStackTrace(); } } } //----------------------------------------- class Collecteur extends Thread { String[] chaineReponse = new String [3]; public Collecteur(String[] Tableau) { chaineReponse=new String [3]; chaineReponse[0]=Tableau[0]; chaineReponse[1]=Tableau[1]; chaineReponse[2]=Tableau[2]; } @Override public void run() { synchronized(System.out) { if (!chaineReponse[0].equals(Commun.ALARME_TEMPERATURE) || !chaineReponse[1].equals(Commun.ALARME_TEMPERATURE) || !chaineReponse[2].equals(Commun.ALARME_TEMPERATURE)) { System.out.println("couleur rouge"); } else if ( ( chaineReponse[0].compareTo(Commun.DEFAILLANCE)==0 || chaineReponse[1].compareTo(Commun.DEFAILLANCE)==0 || chaineReponse[2].compareTo(Commun.DEFAILLANCE)==0 ) && ( chaineReponse[0].compareTo(Commun.DEFAILLANCE)>0 || chaineReponse[2].compareTo(Commun.DEFAILLANCE)>0 || chaineReponse[3].compareTo(Commun.DEFAILLANCE)>0 ) && ( chaineReponse[1].compareTo(Commun.ALARME_TEMPERATURE)>0 || chaineReponse[2].compareTo(Commun.ALARME_TEMPERATURE)>0 || chaineReponse[3].compareTo(Commun.ALARME_TEMPERATURE)>0) ) { System.out.println("couleur orangé"); } else { System.out.println("couleur verte"); } try { sleep(500); } catch (InterruptedException e) { e.printStackTrace(); } } } } //----------------------------------------- class Controleur extends Thread { static int chanel; public String chaineReponse; String[] chainedesReponses = new String[3]; private static final int deltat=400; private final int seuil=56; Capteur C1 , C2 , C3 , C4 ; int[] temperature = new int [4]; int[] delai =new int[4]; public Controleur(int [] tableau, int[] tableau2) { for(int i=0;i<4; i++) temperature[i]=tableau[i]; for(int i=0;i<4; i++) delai[i]=tableau2[i]; } @Override public void run() { try { if (delai[0]<deltat && delai[1]<deltat && delai[2]<deltat && delai[3]<deltat) { if (temperature[0]==temperature[1] && temperature[0]==temperature[2] && temperature[0]==temperature[3] && temperature[0]<seuil) { System.out.println("c'est bien"); chaineReponse=Commun.TEMPERATURE_NORMAL; System.out.println(chaineReponse); } else if (this.temperature[1]>=seuil) { System.out.println("c'est bien"); chaineReponse=Commun.ALARME_TEMPERATURE; System.out.println(chaineReponse); } else { System.out.println("défaillance"); chaineReponse=Commun.DEFAILLANCE; System.out.println(chaineReponse); } } sleep(deltat); } catch (InterruptedException e) { e.printStackTrace(); } } }
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Merci en tous cas
Pourquoi t'as fais une classe commun, tu peux m'expliquez s'il vous plais,
en plus j'ai la même exécution.
j'ai un autre question comment je peux vérifier si le messages sont bien envoyé au contrôleur? Parce que là j'ai fais dans le main tous un tableau qui contient tous les valeurs des réponses mais ca m'affiche des null
je vais te montre les résultats de l'exécution:
0
0
0
0
Reponses[0]null
la valeure de la température : 1315316311
le delai : 6
la valeure de la température : 1880340451
le delai : 56
c'est bien
Température normale
c'est bien
Température normale
la valeure de la température : 370014772
le delai : 57
la valeure de la température : 105530029
le delai : 76
c'est bien
Température normale
Exception in thread "Thread-7" java.lang.NullPointerException
at Collecteur.run(Collecteur.java:20)
Et d'après toi qu'est ce qu'il manque encore dans mon travail car vraimanent je ne sais pas qu'est ce que je doit faire
Pourquoi t'as fais une classe commun, tu peux m'expliquez s'il vous plais,
en plus j'ai la même exécution.
j'ai un autre question comment je peux vérifier si le messages sont bien envoyé au contrôleur? Parce que là j'ai fais dans le main tous un tableau qui contient tous les valeurs des réponses mais ca m'affiche des null
je vais te montre les résultats de l'exécution:
0
0
0
0
Reponses[0]null
la valeure de la température : 1315316311
le delai : 6
la valeure de la température : 1880340451
le delai : 56
c'est bien
Température normale
c'est bien
Température normale
la valeure de la température : 370014772
le delai : 57
la valeure de la température : 105530029
le delai : 76
c'est bien
Température normale
Exception in thread "Thread-7" java.lang.NullPointerException
at Collecteur.run(Collecteur.java:20)
Et d'après toi qu'est ce qu'il manque encore dans mon travail car vraimanent je ne sais pas qu'est ce que je doit faire
KX
Messages postés
16753
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
25 novembre 2024
3 019
9 sept. 2011 à 23:06
9 sept. 2011 à 23:06
J'ai fait une classe Commun pour référencer les constantes qui sont communes aux différentes classes. Par exemple tu fais chaineReponse="Alarme température" avec un L minuscule dans la classe Controleur, mais tu fais chaineReponse[0].contentEquals("ALarme température") avec un L majuscule. Du coup le contentEquals sera forcément faux à cause d'une faute de frappe alors que si tu utilises une constante le compilateur te dira tout de suite quand tu fais une erreur de frappe, parce que soit il connaît la constante, soit il ne la connait pas.
Pour le main, je ne l'ai pas, donc je n'ai pas testé, et comme je t'ai dit je n'ai pas du tout lu ton sujet, je me suis contenté de corriger les erreurs de programmation (ce qui est déjà pas mal), donc je ne sais pas ce que tu as fait ou doit faire.
Par contre pour l'erreur de pointeur je ne sais pas à quoi correspond exactement la ligne 20 chez toi, mais c'est sûrement l'un des chaineReponse[] qui n'est pas initialisé (qui vaut null par défaut) mais je ne sais pas comment tu appelles ta classe de Collecteur dans le main, mais c'est forcément lié à ton paramètre String[] Tableau
Pour le main, je ne l'ai pas, donc je n'ai pas testé, et comme je t'ai dit je n'ai pas du tout lu ton sujet, je me suis contenté de corriger les erreurs de programmation (ce qui est déjà pas mal), donc je ne sais pas ce que tu as fait ou doit faire.
Par contre pour l'erreur de pointeur je ne sais pas à quoi correspond exactement la ligne 20 chez toi, mais c'est sûrement l'un des chaineReponse[] qui n'est pas initialisé (qui vaut null par défaut) mais je ne sais pas comment tu appelles ta classe de Collecteur dans le main, mais c'est forcément lié à ton paramètre String[] Tableau
bonsoir, s'il vous plait j'ai une question à propos l'affichage des valeurs des températures mais il m'a parait qu'ils ne sont pas juste, je pense que les capteurs n'arrivent pas à envoyer les températures aux collecteurs? jevous donne le code de main
public static void main(String[] args) { // TODO Auto-generated method stub int [] deltat= new int[4]; int[] lesTemperature= new int[4]; Capteur C1= new Capteur(); Capteur C2= new Capteur(); Capteur C3= new Capteur(); Capteur C4= new Capteur(); int l= C1.lindat2; int l2=C2.lindat2; int l3=C2.lindat2; int l4=C2.lindat2; deltat[0]=l; deltat[1]=l2; deltat[2]=l3; deltat[3]=l4; ; Controleur CL1 =new Controleur(lesTemperature,deltat); Controleur CL2 =new Controleur(lesTemperature, deltat); Controleur CL3=new Controleur(lesTemperature, deltat); Collecteur C; C = new Collecteur(); //on lance les 4 cmpteurs pour avoir les 4 températures C1.start(); C2.start(); C3.start(); C4.start(); // on lance les collecteurs pour avoir les réponses // on lance le Contoleur CL1.start(); CL2.start(); CL3.start(); C.start(); } }
KX
Messages postés
16753
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
25 novembre 2024
3 019
10 sept. 2011 à 23:47
10 sept. 2011 à 23:47
C'est le même problème que celui que j'ai relevé hier, tu as un problème à l'initialisation de ta classe Collecteur, tu ne lui passe pas de tableau en paramètre !
En conséquence chaineReponse n'est jamais initialisé et tout le reste ne sers à rien...
Autres remarques : lindat est static, donc C1.lindat, C2.lindat... sont une seule et même valeur ! Surtout si en plus tu utilises trois fois C2.lindat !!!
Vérifies toutes variables est-ce qu'elles doivent être static ou non, ça change tout si elles le sont ou non.
En conséquence chaineReponse n'est jamais initialisé et tout le reste ne sers à rien...
Autres remarques : lindat est static, donc C1.lindat, C2.lindat... sont une seule et même valeur ! Surtout si en plus tu utilises trois fois C2.lindat !!!
Vérifies toutes variables est-ce qu'elles doivent être static ou non, ça change tout si elles le sont ou non.
public static void main(String[] args) { Capteur C1 = new Capteur(), C2 = new Capteur(), C3 = new Capteur(), C4 = new Capteur(); int[] deltat= new int[] {C1.lindat2,C2.lindat2,C3.lindat2,C4.lindat2}; int[] lesTemperature= new int[] {0,0,0,0}; // TODO Controleur CL1 = new Controleur(lesTemperature, deltat), CL2 = new Controleur(lesTemperature, deltat), CL3 = new Controleur(lesTemperature, deltat); Collecteur C = new Collecteur(new String[] {"","",""}); // TODO //on lance les 4 Compteurs pour avoir les 4 températures C1.start(); C2.start(); C3.start(); C4.start(); // on lance les Controleur CL1.start(); CL2.start(); CL3.start(); // on lance le Collecteur pour avoir les réponses C.start(); }
KX
Messages postés
16753
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
25 novembre 2024
3 019
11 sept. 2011 à 00:30
11 sept. 2011 à 00:30
Si tu ne passes pas le tableau en paramètres tu vas te retrouver avec le NullPointerException que tu as depuis l'autre jour. Pour le reste comme je t'ai dit je n'ai pas regardé ce que tu devais faire et ce que tu avais fait... Demain peut-être ;-)