Visualizzazione dei risultati da 1 a 6 su 6
  1. #1

    [Java] Ricavare operatore da una stringa

    Salve! Ho una procedura più o meno di questo tipo:


    void Operazione (double x, String operatore, double y)
    {
    boolean flag = false;
    if (???) flag = true;
    else flag = false;
    }

    All'interno della stringa operatore contengo sicuramente uno tra "=", "<", ">", "<=", ">=". Nella condizione dell'if voglio verificare o meno se "x operatore y". Come posso fare a trasformare la stringa operatore in un operatore vero e proprio? Grazie in anticipo

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,328
    Se il tuo scopo è capire quale tra gli operatori è stato passato, dovrai prevedere tante istruzioni if quanti sono gli operatori che decidi di gestire:
    codice:
    if (operatore.equals("=") {
       // Qui gestirai l'operatore "="
    }
    if (operatore.equals("<") {
       // Qui gestirai l'operatore "<"
    }
    ...
    if ("=,>,<,<=,>=".indexOf(operatore) < 0) {
       // E' stato passato un operatore non gestito
    }
    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  3. #3
    No, non è tanto quello che mi interessa. Quello che vorrei è appunto evitare di dover fare:

    if (operatore.equals("=")
    if (x==y) then ...
    else ...

    if (operatore.equals("<")
    if (x<y) then ...
    else ...

    if ...

    Sostanzialmente in quella fase non mi importa che cosa contenga la stringa operatore, voglio solo vedere se "x operatore y" è vera o meno.

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da itised
    voglio solo vedere se "x operatore y" è vera o meno.
    Ma se vuoi sapere se l'espressione è "vera" o no, devi per forza "interpretare" il contenuto della stringa e capire quale operatore è e poi eseguire a tutti gli effetti una comparazione tra i due valori.

    Se non ti piace la catena di if, allora ci sono altre soluzioni. Come ad esempio usare le interfacce e una Map, ecco un esempio banale che ho buttato giù:

    codice:
    import java.util.*;
    
    public class Prova
    {
        public static void main (String[] args)
        {
            Operazioni oper = new Operazioni ();
    
            System.out.println (oper.test (12, "<", 16));
            System.out.println (oper.test (10, ">", 16));
        }
    }
    
    class Operazioni
    {
        private HashMap<String,OperatoreRelazionale> map;
    
        public Operazioni ()
        {
            map = new HashMap<String,OperatoreRelazionale> ();
    
            map.put ("<", new OperatoreRelazionale () {
                public boolean valuta (double x, double y) {
                    return x < y;
                }
            });
    
            map.put (">", new OperatoreRelazionale () {
                public boolean valuta (double x, double y) {
                    return x > y;
                }
            });
        }
    
        public boolean test (double x, String operatore, double y)
        {
            OperatoreRelazionale op = map.get (operatore);
    
            if (op == null)
                throw new IllegalArgumentException ();
    
            return op.valuta (x, y);
        }
    }
    
    interface OperatoreRelazionale
    {
        boolean valuta (double x, double y);
    }
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  5. #5
    Puoi usare un'operazione di Switch e poi una Case, in alternativa alla cascata di IF.

  6. #6
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da Ciccio17
    Puoi usare un'operazione di Switch e poi una Case
    switch su un String??? Prova poi mi dici.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.