Kirjautuminen

Haku

Tehtävät

Keskustelu: Koodit: Java: JavaFX: anagrammi (raahaa ja pudota)

JRokka [06.06.2020 12:33:14]

#

Onko tämä hyvä?

package javafx_drop_anagrammi;

import javafx.application.Application;
import javafx.event.EventHandler;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.input.*;
import javafx.scene.control.Label;
import javafx.scene.control.TextField;
import javafx.scene.text.Text;
import javafx.stage.Stage;

public class JavaFX_Drop_Anagrammi extends Application {
    String ent = "";
    @Override
    public void start(Stage stage){

        stage.setTitle("Ohjelma");
        Group root = new Group();
        Scene scene = new Scene(root,400,400);
        //Luodaan objektit.
        final TextField lahde = new TextField("2");
        final Text kohde = new Text(100,100,"0");
        //Lisätään objektiti.
        root.getChildren().add(lahde);
        root.getChildren().add(kohde);
        //Otetaan tieto
        lahde.setOnDragDetected(new EventHandler<MouseEvent>() {
            public void handle(MouseEvent event){
                Dragboard db = lahde.startDragAndDrop(TransferMode.ANY);
                ClipboardContent sisalto = new ClipboardContent();
                sisalto.putString(lahde.getText());
                db.setContent(sisalto);
                event.consume();
            }
        });

        kohde.setOnDragOver(new EventHandler<DragEvent>(){
            public void handle(DragEvent event){
                if (event.getGestureSource() != kohde && event.getDragboard().hasString()){
                    event.acceptTransferModes(TransferMode.COPY_OR_MOVE);
                }
            }
        });

        kohde.setOnDragEntered(new EventHandler<DragEvent>() {
           public void handle(DragEvent event){
               if (event.getGestureSource() != kohde && event.getDragboard().hasString()){
                   System.out.println("");
               }
           }
        });

        kohde.setOnDragExited(new EventHandler<DragEvent>() {
           public void handle(DragEvent event){
               event.consume();
           }
        });

        kohde.setOnDragDropped(new EventHandler<DragEvent>() {
            public void handle(DragEvent event){
                Dragboard db = event.getDragboard();
                boolean onnistui = false;
                if (db.hasString()){
                    //Katsotaan, onko anagrammi.
                    //Anagrammien pitää olla saman pituiset ja niissä kaikkien merkkien määrä täytyy olla sama.
                    String nyk = db.getString();
                    int yksi = 0;
                    int kaksi = 0;
                    boolean anagrammi = true;
                    for (Character x : ent.toCharArray()){
                        yksi = 0;
                        kaksi = 0;
                        for (Character y : ent.toCharArray()){
                            if (x == y){
                                yksi++;
                            }
                        }
                        for (Character y : nyk.toCharArray()){
                            if (x == y){
                                kaksi++;
                            }
                        }
                        if (yksi != kaksi){
                            anagrammi = false;
                        }
                    }
                    //Näytetään tulos.
                    if (anagrammi == true && ent.length() == nyk.length()){
                        kohde.setText("Anagrammi");
                    }
                    else {
                        kohde.setText("Ei ole anagrammi");
                    }
                    ent = nyk;

                }
                event.setDropCompleted(onnistui);
                event.consume();
            }
        });

        lahde.setOnDragDone(new EventHandler<DragEvent>() {
            public void handle(DragEvent event){
                if (event.getTransferMode() == TransferMode.MOVE){
                    lahde.setText("1");
                }
                event.consume();
            }
        });

        stage.setScene(scene);
        stage.show();
    }
    public static void main(String[] args) {
        Application.launch(args);
    }

}

tositoo [06.06.2020 13:20:58]

#

Miksi kyselet täällä että onko tämä koodi hyvä tai onko tämä koodi hyvä? Tietääkseni Ohjelmointiputkassa kuuluu kysyä ohjelmoinnista tai muusta asiasta, ei siitä että onko minun koodini hyvä. kysyit samaa tässä.

jalski [06.06.2020 20:09:59]

#

JRokka kirjoitti:

Onko tämä hyvä?

No ei... Yksinkertaisin tapa tarkastaa anagrammit on järjestää sanojen kirjaimet aakkosjärjestykseen ja verrata sitten sanoja keskenään. Nopeampiakin tapoja tähän tosin löytyy.

Voit myös itse kokeilla oman toteutuksesi tehokkuutta kirjoittamalla ohjelman, mikä lukee jostain isohkosta sanakirjasta sanat ja muodostaa niistä kaikki anagrammit ja tulostaa listan niistä. Esimerkiksi "british-english-insane" sanakirja tiedosto toimii tähän hyvin ja kohtuullisen tehokas Java toteutus suoriutuu tehtävästä varmaankin noin 10 sekunnissa.

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta