Eclipse Taschenrechner

2 Antworten

Es gibt eine Methode mit der man Rechnungen in einem String berechnen kann:

   ScriptEngineManager factory = new ScriptEngineManager();
     ScriptEngine engine = factory.getEngineByName("JavaScript");
     try {
   System.out.println(engine.eval("4+3"));
  } catch (ScriptException e) {
   e.printStackTrace();

 Ich habe aber auch eine Klasse erstellt, die genauer berechnen kann:

StringCalculation.calculate("4+3");

package fixtures.maths;
import java.math.BigDecimal;
import java.math.MathContext;
public class StringCalculation {
 
    public static double calculate(String expression) {
        if(expression == null || expression.length() == 0) {
            return 0;
        }
        return calc(expression.replace(" ", "")).doubleValue();
    }
    private static BigDecimal calc(String expression) {
        if (expression.startsWith("(") && expression.endsWith(")")) {
            return calc(expression.substring(1, expression.length() - 1));
        }
        String[] containerArr = new String[]{expression};
        BigDecimal leftVal = getNextOperand(containerArr);
        expression = containerArr[0];
        if (expression.length() == 0) {
            return leftVal;
        }
        char operator = expression.charAt(0);
        expression = expression.substring(1);
        while (operator == '*' || operator == '/') {
            containerArr[0] = expression;
            BigDecimal rightVal = getNextOperand(containerArr);
            expression = containerArr[0];
            if (operator == '*') {
                leftVal = leftVal.multiply(rightVal, MathContext.DECIMAL128);
            } else {
                leftVal = leftVal.divide(rightVal, MathContext.DECIMAL128);
            }
            if (expression.length() > 0) {
                operator = expression.charAt(0);
                expression = expression.substring(1);
            } else {
                return leftVal;
            }
        }
        if (operator == '+') {
            return leftVal.add(calc(expression));
        } else {
            return leftVal.subtract(calc(expression));
        }
    }
    private static BigDecimal getNextOperand(String[] exp){
        BigDecimal res;
        if (exp[0].startsWith("(")) {
            int open = 1;
            int i = 1;
            while (open != 0) {
                if (exp[0].charAt(i) == '(') {
                    open++;
                } else if (exp[0].charAt(i) == ')') {
                    open--;
                }
                i++;
            }
            res = calc(exp[0].substring(1, i - 1));
            exp[0] = exp[0].substring(i);
        } else {
            int i = 1;
            if (exp[0].charAt(0) == '-') {
                i++;
            }
            while (exp[0].length() > i && isNumber((int) exp[0].charAt(i))) {
                i++;
            }
            res = new BigDecimal(exp[0].substring(0, i));
            exp[0] = exp[0].substring(i);
        }
        return res;
    }
    private static boolean isNumber(int c) {
        int zero = (int) '0';
        int nine = (int) '9';
        return (c >= zero && c <= nine) || c =='.';
    }
}
Woher ich das weiß:
Recherche

Du musst den Scanner hinzufügen zum Textfield. Er scannt den Text und dadurch kannst du die zahlen addieren...

Wie funktioniert bzw. die Spracheingabe bei Java?

Ich bin neu in Java und hatte mich durch die Tutorials geschaut und habe habe ein kleines Programm geschrieben. Ich habe viele Probleme z.B. das Hintergrundbild zeigt nicht an, die JMenubar kann ich nirgends was auf der Seite etwas ausführen. Und bin noch Anfänger.

Mein Vorhaben ist:

Das man bei der Jmenubar was anklickt ohne das ein neues Fenster angezeigt werden soll. es soll einfach z.B da ein Text stehen und funktionen erhalten. Das Fenster soll ein Sprach input haben, Wo man in der Einstellung am Regler waagerecht die Lautstärke der Aufnahme steuern kann. Die Wörter in umwandelt, wo es weißt, was zu tun ist. (Wie ein Diktat z.B). Bei weiteren Fragen stehe ich euch gern zur verfügung. Es ist mein erstes großes Projekt. Wenn ihr wollt könnt ihr euch darin verewigen. Die Main Klasse und die Gui schreibe ich in den kommi, sonst zu lang der Text.

Ich habe Die Klassen:

  • Main
  • Gui
  • var
  • Label

Die var Klasse:

package pack;

import java.awt.Label; import java.awt.image.BufferedImage; import java.io.File; import java.io.IOException;

import javax.imageio.ImageIO; import javax.swing.JFrame;

public class var {

static JFrame jf1;
static int sreenwidth = 800, sreenheight = 500;
static int background = 0;


static Label lbl1;

static BufferedImage ib1;

public var() {
    
    try {
        //Background
        
        ib1 = ImageIO.read(new File("src/rsc/kl.png"));
    }catch (IOException e) {
        e.printStackTrace();
        System.out.println("Bilder konnte nicht geladen werden");
    }
}

}

Im Label Klasse:

package pack;

import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.RenderingHints;

import javax.swing.JLabel;

public class label extends JLabel{ private static final long serialVersionUID =1L;

protected void paintComponent(Graphics g) {
    super.paintComponent(g);

    Graphics2D g2d = (Graphics2D) g;

    g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
    
    g.drawImage(var.ib1, 0,var.background, 800,500, null);
    
    repaint();
}

...zur Frage

Java Intellij Plugin?

Wollte in ein Plugin eine UUID random in Intellij einfügen bei einer tastenkombi(shortcuts)

Intellij Plugin wo man über shortcut eine UUID einfügt

import com.intellij.openapi.actionSystem.AnAction; import com.intellij.openapi.actionSystem.AnActionEvent; import com.intellij.openapi.application.ApplicationManager; import java.util.UUID;

public class RandomUUID extends AnAction {

@Override
public void actionPerformed(AnActionEvent e) {
    // TODO: insert action logic here
    ApplicationManager.getApplication().invokeLater(new Runnable() {
        @Override
        public void run() {
            ApplicationManager.getApplication().runWriteAction(new Runnable() {
                @Override
                public void run() {
                    UUID.randomUUID();
                }
            });
        }
    });
}

}

...zur Frage

\n funktioniert nicht bei Java

Ich bin angehender Java Programmierer und ich weiß nicht ob ich etwas falsch oder ob ich nur unrndlich dumm bin,

import java.io.FileWriter;

import java.io.IOException;

import java.util.Calendar;

import java.util.Date;

import javax.swing.JOptionPane;

public class DateienEinlesen {

public static void main(String[] args) throws IOException {
    // TODO Auto-generated method stub
        FileWriter fw = new FileWriter("C:/Users/myName/Desktop/daten.txt", true); //Filewriter
        Calendar cal = Calendar.getInstance();
        int y = cal.get(Calendar.YEAR);
        int m = cal.get(Calendar.MONTH);
        int d = cal.get(Calendar.DAY_OF_MONTH); //Datum einlesen
        Date dat = cal.getTime(); //Zeit einlesen
        String da = dat.toString();
        String t = da.substring(11, 19); //Zeit herauslesen au geasamtem String
        Object name = JOptionPane.showInputDialog(null, "Wähle deinen Namen", "Name", JOptionPane.QUESTION_MESSAGE, null, new Object[] {"Raphael", "Eva", "Anderer"}, "Anderer"); //JOptionPane mit mehreren Auswahlfeldern
        fw.write("[" + name + "]" + " " + d + "." + m + "." + y + " " + t + "\n"/*dieses \n funktioniert nicht!!!!*/); //in Datei scheiben
        fw.close();
}

}

...zur Frage

JavaFX mit Gridpane 2 Hbox in das selbe Kästchen?

Hi!

Wie kann ich dafür sorgen, dass wenn ich in ein Kästchen einer Javefx Gridpane 2 Hboxen tue, dass deren beider Komponenten noch für Events empfänglich sind. Hier ein Beispiel, dass NICHT funktioniert:

import javafx.application.Application;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.geometry.Pos;
import javafx.scene.Scene;
import javafx.scene.control.*;
import javafx.scene.layout.*;
import javafx.stage.Stage;

public class Test extends Application {

public static void main(String[] args) {
    launch(args);
}
@Override
public void start(Stage primaryStage) {
    primaryStage.setTitle("Test");
    Button btn1 = new Button();
    btn1.setText("Knopf 1");
    btn1.setOnAction(new EventHandler<ActionEvent>() {

        @Override
        public void handle(ActionEvent event) {
            System.out.println("1. Knopf");
        }
    });
    Button btn2 = new Button();
    btn2.setText("Knopf 2");
    btn2.setOnAction(new EventHandler<ActionEvent>() {

        @Override
        public void handle(ActionEvent event) {
            System.out.println("2. Knopf");
        }   
    });
    HBox b1 = new HBox();
    b1.setAlignment(Pos.BASELINE_LEFT);
    b1.getChildren().add(btn1);
    
    HBox b2 = new HBox();
    b2.setAlignment(Pos.BASELINE_RIGHT);
    b2.getChildren().add(btn2);
    
    GridPane root = new GridPane();
    root.setGridLinesVisible(true);
    root.add(b2, 0, 0);
    root.add(b1, 0, 0);
    root.add(new Label("______________SPACER______________"), 0, 1);
    primaryStage.setScene(new Scene(root, 300, 250));
    primaryStage.show();
  }
}

Der 2. Knopf steht zwar am Anfang im Fokus, lässt sich aber nicht drücken/ mit Enter betätigen. Er lässt sich auch nach drücken des 1. Knopfs nicht wieder in den Fokus bringen. Wie kann ich das Lösen, OHNE beide in eine box zu bringen?

Danke für alle hilfreichen Antworten. __________________________________________________________________

Ich will NICHT sowas wie "Du köntest die knöpfe doch einfach in verschiedene Kästchen selzen." hören. Das ist nur ein BEISPIEL, bei meinem Code, für den ich das brauche, ist das vonnöten.

...zur Frage

Wie füge ich die Onlinezeit eines Spielers in mein Scoreboard Plugin ein?

Hallo,

Ich habe einen eigenen Server und möchte für diesen ein Scoreboard Programmieren.

Ich wollte fragen, wie ich jetzt noch die Onlinezeit von einem Spieler in H einfügen kann.

Hier ist der Sourcecode:

package de.xite.main;

import org.bukkit.Bukkit; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; import org.bukkit.event.player.PlayerJoinEvent; import org.bukkit.event.player.PlayerQuitEvent; import org.bukkit.plugin.java.JavaPlugin; import org.bukkit.scheduler.BukkitRunnable; import org.bukkit.scoreboard.DisplaySlot; import org.bukkit.scoreboard.Objective; import org.bukkit.scoreboard.Scoreboard; import org.bukkit.scoreboard.ScoreboardManager;

public class main extends JavaPlugin implements Listener {

@Override
public void onEnable() {

    this.getServer().getPluginManager().registerEvents(this, this);
    
}

public void setScoreboard(Player p) {
    
ScoreboardManager sm = Bukkit.getScoreboardManager();
final Scoreboard board = sm.getNewScoreboard();
final Objective o = board.registerNewObjective("Scoreboard", "dummy");

o.setDisplaySlot(DisplaySlot.SIDEBAR);
o.setDisplayName("§7» §6Xitecraft.ml §7«");

o.getScore("§a ").setScore(15);
o.getScore("§bDein Rang:").setScore(14);


if (p.hasPermission("Prefix.admin")) {
    o.getScore("§4Admin").setScore(13);
} else if (p.hasPermission("Prefix.dev")) {
    o.getScore("§bDeveloper").setScore(12);
} else {
    o.getScore("§8Spieler").setScore(11);
}



o.getScore("§b ").setScore(10);
o.getScore("§bOnline: ").setScore(9);
o.getScore("§a" + Bukkit.getOnlinePlayers().size() + "/" + Bukkit.getMaxPlayers()).setScore(8);
o.getScore("§c ").setScore(8);
o.getScore("§bWebsite").setScore(7);
o.getScore("§a/website").setScore(6);
o.getScore("§d ").setScore(5);
o.getScore("§bTeamSpeak:").setScore(4);
o.getScore("§a/teamspeak").setScore(3);
o.getScore("§e ").setScore(2);
o.getScore("§bSkype").setScore(1);
o.getScore("§aXitecraftServer").setScore(0);

    
p.setScoreboard(board);

}

@EventHandler
public void onJoin(PlayerJoinEvent e) {
    
    new BukkitRunnable() {
        @Override
        public void run() {
            
            for (Player all : Bukkit.getOnlinePlayers()) {
                setScoreboard(all);
            }
            
        }
    }.runTaskLater(this, 1);
}

@EventHandler
public void onQuit(PlayerQuitEvent e) {
    
    new BukkitRunnable() {  
        @Override
        public void run() {
            
            for (Player all : Bukkit.getOnlinePlayers()) {
                setScoreboard(all);
            }
            
        }
    }.runTaskLater(this, 1);
}

}

...zur Frage

Java und Eclipse: Zufallszahl herausfinden

Ich bin gerade so am grübeln, wollte mal bissl mit Eclipse herumspielen :D

Zu meiner Frage: Es soll eine Zufallszahl zwischen 1 und 100 geraten werden. Nach jedem Versuch wird angegeben, ob die eingegebene Zahl zu groß oder zu klein oder genau richtig ist. Ich würde es auch noch gerne so haben, dass die Anzahl der Versuche dann auch noch dabei steht. Ich habe jetzt schonmal so angefangen:

import java.util.Random.*;

import ch.aplu.util.*; public class raten {

/**
 * @param args
 */
public static void main(String[] args) {
    // TODO Auto-generated method stub

    Random zuf = new Random();
    int n = zuf.nextInt(100);

Wollte danach ne while-Schleife einfügen, aber ich bin so ein Anfänger im programmieren und komm nach mehrmaligen versuchen nicht drauf :'(

Wär schon wenn mir einer das mal erklären könnte oder mir das fertig programmierte geben könnte(dann versuche ich das daran zu verstehen :D) Schon mal herzlichen Dank!

...zur Frage

Was möchtest Du wissen?