Java 没有空格的数学字符串?
我想让程序做的是让一个人输入一个1/2或1%2的数学运算(不是乘法)Java 没有空格的数学字符串?,java,string,conditional-statements,Java,String,Conditional Statements,我想让程序做的是让一个人输入一个1/2或1%2的数学运算(不是乘法) ,但就像那样,没有空间。尽管如此,我还是想检查正在进行的操作,这就是为什么我要使用if语句。我不明白的是程序如何知道操作何时以字符串形式出现。我甚至不确定我是否设置正确。总的来说,我需要一个字符串,它先读取数字,然后执行操作,然后再读取数字。如果这看起来像是在做我的硬件,我很抱歉,但我已经尝试过多次制作这个程序,但不明白如何用字符串来完成。我写第二篇文章是为了说明我已经做了很多次了,所以你可以忽略它。多谢各位 使用以下命令将输
,但就像那样,没有空间。尽管如此,我还是想检查正在进行的操作,这就是为什么我要使用if语句。我不明白的是程序如何知道操作何时以字符串形式出现。我甚至不确定我是否设置正确。总的来说,我需要一个字符串,它先读取数字,然后执行操作,然后再读取数字。如果这看起来像是在做我的硬件,我很抱歉,但我已经尝试过多次制作这个程序,但不明白如何用字符串来完成。我写第二篇文章是为了说明我已经做了很多次了,所以你可以忽略它。多谢各位 使用以下命令将输入读取为字符串:
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.");
}
}
}
*/
获取运算符的索引:
String inputString = input.nextLine();
从我们之前得到的indexOp中获取运算符:
int operand1 = Integer.parseInt(inputString.substring(0,indexOp));
int operand2 = Integer.parseInt(inputString.substring(indexOp+1,inputString.length());
希望能有所帮助:)我毫不怀疑有很多方法可以实现这一点,这只是另一个例子 它试图做的是将传入的文本分解为数字组和非数字组。然后,它通过这些组成计算的各种元素的组进行循环
char operator = inputString.charAt(indexOp);
扫描仪输入=新扫描仪(System.in);
System.out.println(“输入一个操作编号:”);
String text=input.nextLine();
System.out.println(“输入=”+文本);
text=text.replaceAll(\\s,“”);
System.out.println(“Parse=“+text”);
模式p=Pattern.compile(\\d+\\d+);
匹配器m=p.Matcher(文本);
int指数=0;
int op1=-1;
int op2=-2;
字符串exp1=“”;
而(索引<3&&m.find()){
系统输出打印项次(索引);
字符串部分=m.组();
开关(索引){
案例0:
op1=整数.parseInt(部分);
打破
案例2:
op2=整数.parseInt(部分);
打破
案例1:
exp1=零件;
打破
}
索引++;
}
System.out.println(op1+“”+exp1+“”+op2);
它所具有的功能是允许您提供更长的计算时间,例如20+30/40-50
…等等
您需要将每个操作数和指数放入某种类型的列表
中,并根据需要提取它们…或者您可以在循环时直接在中进行计算尝试以下操作:
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);
我想添加另一个解决方案,它消除了大量的解析工作
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!");
}
}
}
样本结果
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);
}
}
我认为类似于stringtext=input.nextLine()代码>后接text=text.replaceAll(“\s”,”)
将删除用户输入的文本中的所有空格。您可以使用进一步的正则表达式来分解字符串
,提取所需的部分,或者使用另一个扫描仪
来扫描每个元素(nextInt
等)
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