Fallstar

Chiffres.java

May 16th, 2015
322
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 5.01 KB | None | 0 0
  1. package Taquin;
  2. import java.util.*;
  3.  
  4.  
  5. public class Chiffres implements IJeu{
  6.  
  7.     public enum Operateur {PLUS,MINUS,TIMES,DIV};
  8.    
  9.     public class BadParamsException extends Exception{
  10.    
  11.     }
  12.    
  13.     private ArrayList<Integer> chiffres;
  14.     private ArrayList<Operateur> op;
  15.     private int resultat;
  16.    
  17.    
  18.     public Chiffres(int[] c, Operateur[] o, int res) throws BadParamsException{
  19.         if ((c.length) != (o.length+1)){
  20.             throw new BadParamsException();
  21.         } else {
  22.             this.resultat = res;
  23.             this.chiffres = new ArrayList<Integer>();
  24.             for (int n : c){
  25.                 if (n==0){
  26.                     throw new BadParamsException();
  27.                 } else {
  28.                     this.chiffres.add(n);
  29.                 }
  30.             }
  31.             this.op = new ArrayList<Operateur>();
  32.             for (Operateur op : o){
  33.                 this.op.add(op);
  34.             }
  35.         }
  36.            
  37.     }
  38.    
  39.     public Chiffres(Chiffres c){
  40.         this.chiffres = new ArrayList<Integer>();
  41.         this.op = new ArrayList<Operateur>();
  42.         for (Integer n : c.chiffres){
  43.             this.chiffres.add(n);
  44.         }
  45.         for (Operateur o : c.op){
  46.             this.op.add(o);
  47.         }
  48.         this.resultat = c.resultat;
  49.     }
  50.    
  51.     public boolean estGagnant(){
  52.         if (this.chiffres.size()==1 && this.chiffres.get(0)==this.resultat){
  53.             return true;
  54.         } else {
  55.             return false;
  56.         }
  57.     }
  58.    
  59.     public ArrayList<IJeu> generer_fils(){
  60.         ArrayList<IJeu> enfants = new ArrayList<IJeu>();
  61.         Chiffres fils = new Chiffres(this);
  62.        
  63.         for (Integer x : this.chiffres){
  64.             for (Integer y : this.chiffres){
  65.                 if (!(x==y)){
  66.                     for (Operateur o : this.op){
  67.                                      
  68.                         switch (o) {
  69.                             case PLUS :
  70.                                 fils = new Chiffres(this);
  71.                                 fils.chiffres.remove(x);
  72.                                 fils.chiffres.remove(y);    
  73.                                 fils.chiffres.add(x+y);
  74.                                 fils.op.remove(o);
  75.                                 enfants.add(fils);
  76.                                 break;
  77.                             case MINUS :
  78.                                 fils = new Chiffres(this);
  79.                                 fils.chiffres.remove(x);
  80.                                 fils.chiffres.remove(y);
  81.                                 fils.op.remove(o);
  82.                                 fils.chiffres.add(x-y);
  83.                                 enfants.add(fils);
  84.                                 break;
  85.                             case TIMES :
  86.                                 fils = new Chiffres(this);
  87.                                 fils.chiffres.remove(x);
  88.                                 fils.chiffres.remove(y);    
  89.                                 fils.chiffres.add(x*y);
  90.                                 fils.op.remove(o);
  91.                                 enfants.add(fils);
  92.                                 break;
  93.                             case DIV :
  94.                                 fils = new Chiffres(this);
  95.                                 fils.chiffres.remove(x);
  96.                                 fils.chiffres.remove(y);
  97.                                 fils.op.remove(o);
  98.                                 fils.chiffres.add(x/y);
  99.                                 enfants.add(fils);
  100.                                 break;
  101.                         }
  102.                        
  103.                     }
  104.                 }
  105.             }
  106.         }
  107.         return enfants;
  108.     }
  109.    
  110.    
  111.     public String toString(){
  112.         String s = "{";
  113.         for (Integer n : this.chiffres){
  114.             s+= n + " ";
  115.         }
  116.         s += "} {";
  117.         for (Operateur o : this.op){
  118.             switch (o) {
  119.                 case PLUS : s += "+ "; break;
  120.                 case MINUS : s += "- "; break;
  121.                 case TIMES : s += "* "; break;
  122.                 case DIV : s += "/ "; break;
  123.             }
  124.         }
  125.         s += "} = " + this.resultat + "\n";
  126.         return s;
  127.      }
  128.        
  129.        
  130.        
  131.     public boolean equals(Object o){
  132.         if (o.getClass()==this.getClass() && ((Chiffres)o).chiffres.size()==this.chiffres.size()){
  133.             for (int i = 0; i<this.chiffres.size(); i++){
  134.                 if (this.chiffres.get(i) != ((Chiffres)o).chiffres.get(i)){
  135.                     return false;
  136.                 }
  137.             }
  138.             for (int i = 0; i<this.op.size(); i++){
  139.                 if (this.op.get(i)!=((Chiffres)o).op.get(i)){
  140.                     return false;
  141.                 }
  142.             }
  143.             return true;
  144.         } else return false;
  145.    
  146.     }
  147.    
  148.    
  149.    
  150.     public static void main(String[] args) {
  151.         try {
  152.             Chiffres c = new Chiffres(new int[]{1,4,3},new Operateur[]{Operateur.PLUS, Operateur.MINUS},6);
  153.             System.out.println(c.estGagnant());
  154.             System.out.println(c);
  155.            
  156.             Chiffres c2 = new Chiffres(new int[]{8},new Operateur[]{},8);
  157.             System.out.println(c2.estGagnant());
  158.            
  159.            
  160.        
  161.            
  162.             Resol res = new Resol(c);
  163.            
  164.             res.solve();
  165.             res.printSolution();
  166.            
  167.            
  168.            
  169.            
  170.         } catch (Exception e) {
  171.             System.err.println("Impossible");
  172.         }
  173.    
  174.  
  175.     }
  176. }
Advertisement
Add Comment
Please, Sign In to add comment