0
import java.util.Scanner;

public class Improved {
    public static void main(String[] args) {

        Scanner input = new Scanner(System.in);

        System.out.println("Enter a number operaion number: "); 
        int operand1 = Integer.parseInt(input.nextLine());
        char expo1 = input.next().charAt(0);
        int operand2 = Integer.parseInt(input.nextLine());

        System.out.println( operand1 + expo1 + operand2 + "=");

        if ( expo1 == '/'  && operand2 == '0' ){
            System.out.println("Cannot divide by zero"); }
        else
            if (expo1 == '-') {
                System.out.println(operand1-operand2);
            } else 
            if (expo1 == '+') {
                System.out.println(operand1+operand2);
            } else
            if (expo1 == '/') {
                System.out.println(operand1/operand2);
            } else 
            if (expo1 == '%') {
                System.out.println(operand1%operand2);
            }
            else{
                System.out.println(" Error.Invalid operator.");
            }
    }
}

//This bottom works, but I found out that this is not what is supposed to be done with this problem

/*
public class Else {
    public static void main(String[] args) {

        int operand1;
        char exp1;
        int operand2;

        if (args.length != 3 ) {
            System.err.println("*** Program needs 3 arguements***");
            System.err.println("Usage: java Else int1 exp int2");
            System.exit(1);
        }

        operand1 = Integer.parseInt(args[0]);

        exp1 = args[1].charAt(0);

        operand2 = Integer.parseInt(args[2]);


        System.out.print(args[0] + args[1] + args[2] + "=");

        if(exp1 == '-') {
            System.out.println(operand1 - operand2);
        } else 
        if (exp1 == '+') {
            System.out.println(operand1 + operand2);
        } else
        if (exp1 == '/') {
            System.out.println(operand1 / operand2);
        } else 
        if (exp1 == '%') {
            System.out.println(operand1 % operand2);
        }
        else{
            System.out.println(" Error.Invalid operator.");
        }
    }
}
*/

私がプログラムに実行させたいのは、数学演算 1/2 または 1%2 (乗算ではない) を入力するように求めることですが、スペースなしでそのようにします。それでも、どの操作が行われているかを確認したいので、if ステートメントを入れます。私が得られないのは、操作が文字列に現れたときにプログラムがどのように認識するかです。正しく設定できているかどうかさえわかりません。全体として、数値を読み取り、次に操作を読み取り、次に数値を読み取る文字列が必要です。これが私のハードウェアのように思えたら申し訳ありませんが、このプログラムを何度も作成しようとしましたが、文字列でこれを行う方法がわかりません。2番目のものは、これを複数回行ったことを示すために書いたので、無視してください. どうもありがとうございます!

4

4 に答える 4

0

以下を使用して入力を文字列として読み取ります。

String inputString = input.nextLine();

演算子のインデックスを取得します。

int indexOp = inputString.indexOf("+");
if(indexOp < 0) indexOp = inputString.indexOf("-"); //cannot find +, so find -
if(indexOp < 0) indexOp = inputString.indexOf("/"); //cannot find -, so find /
if(indexOp < 0) indexOp = inputString.indexOf("%"); //cannot find /, so find %

次を使用して、第 1 オペランドと第 2 オペランドを取得します。

int operand1 = Integer.parseInt(inputString.substring(0,indexOp));
int operand2 = Integer.parseInt(inputString.substring(indexOp+1,inputString.length());

前に取得した indexOp から演算子を取得します。

char operator = inputString.charAt(indexOp);

それが役に立てば幸い :)

于 2013-10-09T01:26:51.223 に答える
0

解析作業の多くを削除する別のソリューションを追加したいと思います。

import java.util.Scanner;
import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
import javax.script.ScriptException;

class Scratch {
    public static void main(String[] args) throws ScriptException {
        System.out.println("Enter an operation:");
        Scanner input = new Scanner(System.in);
        String operation = input.nextLine();

        ScriptEngineManager manager = new ScriptEngineManager();
        ScriptEngine engine = manager.getEngineByName("js");
        Object result = engine.eval(operation);
        System.out.printf("%s = %s%n", operation, result);
    }
}

サンプル結果

Enter an operation:
2 + 3 * 4
2 + 3 * 4 = 14.0
于 2014-05-14T10:49:54.247 に答える
0

これを達成する方法はたくさんあると思いますが、これは単なる別の例です...

これがやろうとしているのは、入力テキストを数字のグループと数字以外のグループに分解することです。次に、計算のさまざまな要素を構成するこれらのグループをループします...

Scanner input = new Scanner(System.in);
System.out.println("Enter a number operaion number: ");
String text = input.nextLine();
System.out.println("Input = " + text);
text = text.replaceAll("\\s", "");
System.out.println("Parse = " + text);

Pattern p = Pattern.compile("\\d+|\\D+");
Matcher m = p.matcher(text);
int index = 0;
int op1 = -1;
int op2 = -2;
String exp1 = "";
while (index < 3 && m.find()) {
    System.out.println(index);
    String part = m.group();
    switch (index) {
        case 0:
            op1 = Integer.parseInt(part);
            break;
        case 2:
            op2 = Integer.parseInt(part);
            break;
        case 1:
            exp1 = part;
            break;
    }
    index++;
}

System.out.println(op1 + " " + exp1 + " " + op2);

これが持っているのは、たとえば20+30/40-50...など、はるかに長い計算を提供できるようにする機能です。

各オペランドと指数を何らかの種類にパークし、必要にList応じて抽出する必要があります...または、実際にwhileループ内で直接計算を行うこともできます

于 2013-10-09T01:33:42.100 に答える
0

これを試して:

package week11;

import java.util.Scanner;

public class maths {
    public static void main(String[] args) {

        Scanner scanner = new Scanner(System.in);

        System.out.println("enter a number "); 


        int x = scanner.nextInt();
        System.out.println("put +, -, / or * ");
        char expo1 = scanner.next().charAt(0);
        System.out.println("second number please ");
        int y = scanner.nextInt();


        System.out.println( "Answer is" + ":");

        if ( expo1 == '/'  && y == '0' ){
            System.out.println("cannot be divided by 0"); }
        else
            if (expo1 == '-') {
                System.out.println(x-y);
            } else 
            if (expo1 == '+') {
                System.out.println(x+y);
            } else
            if (expo1 == '/') {
                System.out.println(x/y);
            } else 
            if (expo1 == '%') {
                System.out.println(x%y);
            }
            else{
                System.out.println(" Error!");
            }
    }
}
于 2014-05-14T08:08:45.217 に答える