我想计算1_1/2 * 1_1/2
. 我不知道我们该怎么做,但下面是我当前的代码,下面是我对此实现的想法代码。我知道我的代码仅限于基本的 num1 操作。和 num2。我想如果 num1 或 num2 等于 1_1/2 是 1 似乎是一个整数并使其成为 2/2 并将其添加到 1/2 以使 3/2 并进行除法以使其成为 1.5 并遵循方程套装。
static int DO_DEBUG = 0; // set to 1 for messages on, or 0 for messages off
static final boolean BASIC_VERSION = true;
public static void main( String[] args ) {
calculator();
//test();
}
public static void test() {
String[] tests = {
"1+1",
"12 * 12",
"1_1/2 * 1_1/2",
"12 + mom",
"12/3 / 3",
"1_/3 + 5",
"1 & 4",
"12 +5",
"1/3 - 1_4/5/6"
};
for (int i = 0; i < tests.length; i++ ) {
System.out.println( "TESTING: " + tests[i] );
processInput( tests[i] );
}
}
static void calculator() {
Scanner console = new Scanner ( System.in ); //turing input on
System.out.println();
String level = "Basic";
if (! BASIC_VERSION ) {
level = "Advanced";
}
System.out.println( "Welcome to the " + level + " Calculator");// have the option to pick basic or advance
String input = "";
while ( true ) {
printPrompt();//this prompt is introduced in a different method
input = console.nextLine();
if ( isQuitRequest( input ) ) {//method to quit, says 'bye'
break;//ends
}
processInput( input );// doing the task
}
System.out.println( "bye" );
System.out.println( );
console.close(); // quite keyword that closes console
}
static boolean isQuitRequest( String input ) {
return input.equalsIgnoreCase( "quit" );
}
static void processInput( String input ) {
if ( isQuitRequest( input ) ) { // if quit, does not reach here
return;
}
String error = null;
String[] tokens = input.split(" ");
if ( tokens.length < 3 ) {
error = "Not enough entires.";
} else if (tokens.length > 3 ) {
error = "Too many entries.";
}
if (error != null ) {
printError( input, error );
return;
}
String operator = tokens[1];
String addition = "+";
String subtraction = "-";
String multiplication = "*";
String division = "/";
double num1 = Double.parseDouble(tokens[0]);
double num2 = Double.parseDouble(tokens[2]);
double result;
String number1 = tokens[0];
String operation = tokens[1];
String number2 = tokens[2];
debug( "processInput: parse result number1='" + number1 + "' "
+ "number2='" + number2 + "' "
+ "operation='" + operation + "'."
);
if ( (! isNumberValid( number1 ) )
|| (! isNumberValid( number2 )
|| ( operation.length() != 1 )
|| ("+-*/".indexOf( operation ) < 0 )) ) {
error = "Syntax error.";
}
// If there is an error, print it,
// else print the parse results.
if (error != null ) {
printError( input, error );
} else {
//System.out.println( "Numbers are " + number1 + " and "
// + number2 + ". Operation is " + operation +".");
if (operator.equals(addition)){
result = num1 + num2;
System.out.println("Answer is " + result);
}
else if (operator.equals(subtraction)){
result = num1 - num2;
System.out.println("Answer is " + result);
}
else if (operator.equals(multiplication)){
result = num1 * num2;
System.out.println("Answer is " + result);
}
else if (operator.equals(division)) {
result = num1 / num2;
System.out.println("Answer is " + result);
}
else {
}
}
}
//just validating -_-
static boolean isNumberValid( String numstr ) {
boolean isValid = true;
if ( BASIC_VERSION ) {
isValid = isValidInt( numstr );
} else { // ADVANCED version.
isValid = isValidMixedFraction( numstr );;
}
return isValid;
}
//This is to assure that everything entered is valid
static boolean isValidInt( String numstr ) {
boolean isValid = true;
for( int i = 0; i < numstr.length(); i++ ) {
char c = numstr.charAt( i );
if (! Character.isDigit( c )) {
isValid = false;
}
}
return isValid;
}
// formating of mixed numbers
static boolean isValidMixedFraction( String numstr ) {
boolean isvalid = true;
// get parts this string around the _
String[] underscoreTokens = numstr.split("_");
String firstPart = underscoreTokens[0];
String secondPart;
if( underscoreTokens.length == 1 ) {
secondPart = null;
} else if( underscoreTokens.length == 2 ) {
secondPart = underscoreTokens[1];
} else { // underscoreTokens.length > 2 length matters
return false;
}
debug( "isValidMixedFraction: firstPart='"+ firstPart + "', secondPart='"
+ secondPart +"'" );
if (secondPart == null ) {
// first part can be "n" or "n/n"
if( (! isValidInt( firstPart ) ) && (! isValidFraction( firstPart )) ) {
isvalid = false;
}
} else { // 2nd part not null.
if ( ! isValidInt( firstPart ) ) {
isvalid = false;
}
if ( ! isValidFraction( secondPart ) ) {
isvalid = false;
}
} // end else second part not null
return isvalid;
}
//validating the format of the fraction if it is to be valid
static boolean isValidFraction( String numstr ) {
boolean isValid = true;
// get parts this string around the _
String[] slashTokens = numstr.split("/");
if( slashTokens.length != 2 ) {
return false;
}
String firstPart = slashTokens[0];
String secondPart = slashTokens[1];
if ( ! isValidInt(firstPart) ) {
isValid = false;
} else if (! isValidInt(secondPart) ) {
isValid = false;
}
return isValid;
}
static void printError( String input, String error ) {
System.out.println( "ERROR: " + error + " for input '" + input + "'." );
}
static void printPrompt() {
System.out.print( "> " );
}
static void debug( String s ) {
if ( 0 < DO_DEBUG) {
System.out.println( "DBG: " + s);}
}
}
其他:
String num1;
String num2;
d1 = Double.parse.Double(num 1);
d1 = convtMixed(num1);
double convertMixed(String fract)
double result = 0;
fract.split(_);
result + = Double.parseDouble(token[0]);
如何?你会怎么做?我使用范围对吗?在哪里?