2016-04-05 18 views
0

私はコマンドラインからargsで(私の計算機で)数字を計算しようとします。例:プログラムでコマンドラインから数学演算子を使用するにはどうすればよいですか?

args[0] = 2*3; 
String result = method(args[0]); 
System.out.println(result) // should be 6 

"+"、 " - "の2桁の数字の間でcharを使用する方法がわかりません。私はループを使用することはできません。私の方法の考え方は次のようにのcharAtを使用している:

char a = arg.charAt(0); 
char b = arg.charAt(1); 
char c = arg.charAt(2); 

しかし、私は計算を行うために私のb文字(*)を変更するのか分かりません。

+1

「私はループを使用しません」...これはあなたが得た宿題ですか? – Stultuske

+1

'args [0]'は '6'か' '2 * 3" 'の文字列を意味していますか?私はそれが後者だと思う。複数の演算子を使用できますか?括弧?そうでない場合は、単純に演算子で分割して整数を取得し(整数であると仮定して)、演算子演算を行います。 –

+0

正規表現はどうですか?あなたはそれを試してみるべきです。 – Prashant

答えて

1

値を正しく渡していません。あなたの入力は文字列ですよね?あなたのコードは整数式を示しています。

args[0] = "2*3"; //note that this changed to a string 
double result = parse(args[0]); 
System.out.println(result) // should be 6 

次に、あなたの方法であなたの文字列を解析することができます

double parse(String str){ 
    int num1 = Integer.valueOf(str.substring(0,1)); 
    char operator = str.charAt(1); 
    int num2 = Integer.valueOf(str.substring(2,3)); 
    switch(operator){ 
    case '+': return num1+num2; 
    case '-': return num1-num2; 
    case '*': return num1*num2; 
    case '/': return num1/num2; 
    default: throw new IllegalArgumentException(); 
    } 
} 

は私のコードでSystem.out.println(parse("2*3"));プリントを6.0実行します。

もちろん、これは正確に1桁のオペランドでのみ機能します。しかし、それはあなたのcharAtアイデアからの制限です。

+0

いいえ、おそらくもっと良い例です。私のargは1/2で、プログラムの結果は0.5でなければなりません。それより良い@ f1sh? IntelliJは、コマンドラインの引数は文字列であると言いました。 – Kirchy

+0

ディビジョンも同様に動作させたいときは、ダブルのようなもので作業する必要があります。コードを更新します。 – f1sh

0

私は通常、あなたがこのようなプロセスを実行する場合は、文字列として入力を取得しますJAVAを使用して、しかし...

ないよ:今

> MyCalculator 2*3 

を、あなたはこれを分離したいですあなたが何かを行うことができ、このため Number1, Operation, Number2 :三つの部分に文字列になりまし

String[] parts = args[0].split("\\*"); 
Double Number1 = Double.parseDouble(parts[0]) 
Double Number2 = Double.parseDouble(parts[1]) 

は、あなたがトンを逃すことになりますことがあり彼オペレータ.. はそうあなたがそれを見つけて、それをフェッチしたい、またはあなたがこのような何かを行うことができます。

if(args[0].indexOf("*") > -1) 
{ 
    System.out.println(Number1 * Number2); 
} 

編集:よりflexibillityため 、あなたはそれを周りに反対の方法をやってみたいことがあります。

if(args[0].indexOf("*") > -1) 
{ 
    String[] parts = args[0].split("\\*"); 
    Double Number1 = Double.parseDouble(parts[0]) 
    Double Number2 = Double.parseDouble(parts[1]) 
    System.out.println(Number1 * Number2); 
} 

if(args[0].indexOf("/") > -1) 
{ 
    String[] parts = args[0].split("/"); 
    Double Number1 = Double.parseDouble(parts[0]) 
    Double Number2 = Double.parseDouble(parts[1]) 
    System.out.println(Number1/Number2); 
} 

等...という

予告「 - 」

+0

これは乗算にのみ有効です... – f1sh

+0

true、ここが編集です – Henrik

0

そのない最善の解決策、特にいらいらすることが、それは動作しますが、次のことができます任意の長さの番号を入力してください。

String[] number = args[0].split("[*]|[/]|[+]|[-]"); 
int stringLength = args[0].length(); 
int operatorBeginning = number[0].length(); 
int operatorEnd = stringLength - number[1].length(); 
String operator = args[0].substring(operatorBeginning,operatorEnd); 

double answer = 0; 

switch(operator) { 
    case "*": 
      answer = Integer.valueOf(number[0]) * Integer.valueOf(number[1]); 
      break; 
    case "/": 
      answer = Integer.valueOf(number[0])/Integer.valueOf(number[1]); 
      break; 
    case "+": 
      answer = Integer.valueOf(number[0]) + Integer.valueOf(number[1]); 
      break; 
    case "-": 
      answer = Integer.valueOf(number[0]) - Integer.valueOf(number[1]); 
      break; 
    default: 
      System.out.println("Wrong operator"); 
      break; 
} 

System.out.println(answer); 
関連する問題