Я хочу сделать расчет 1_1/2 * 1_1/2
. Я не мог понять, как это сделать, но ниже мой текущий код, а ниже это мой код мысли для этой реализации. Я знаю, что мой код ограничен базовым num1 op. и num2. Я хочу, если num1 или num2 равно 1_1/2, это то, что 1 будет выглядеть как целое число и сделать его 2/2, и он будет добавлен к 1/2, чтобы сделать 3/2 и сделать разделение, чтобы сделать его 1.5 и следовать уравнение соответствует.** ПОМОЩЬ ** Расчет смешанной фракции в Java Код
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]);
Как? Что бы вы сделали? Я использую область действия? Где?
Спасибо за изменения, @kickbuttowski. Вы можете мне помочь? – Integral
другой человек попросил вас объяснить, что означает 1_1/2 в вашем коде? –
Какой еще человек? Я знаю, что это значит. Я просто смущен. 1 - целое число, и это часть того, что было перед ним, а затем - это раскол, который говорит, что 1/2 является дробью. Я хочу преобразовать 1 в 2/2 и добавить его в 1/2, чтобы быть 3/2, и быть разделенным на 1,5, чтобы следовать введенному выражению – Integral