Search code examples
javafractions

Java Fraction Calculator error


My Homework over thanksgiving is to make a fraction calculator that takes input and gives the answer for example 1/2 + 1/4 = 3/4 but when i enter input i get the error:

Error Starts: Exception in thread "main" java.lang.Error: Unresolved compilation problem: The method substring(int) in the type String is not applicable for the arguments (String)

at alex.Fraction.run(Fraction.java:44)
at alex.Fraction.main(Fraction.java:19) error ends

Could someone explain to me what the problem is?

See Code Below:

import java.util.Scanner; 

public class Fraction {





        public static void main(String[]args){
            System.out.println(" enter input");
            Scanner console=new Scanner(System.in);
            while (true){
                String input=console.nextLine();
                if(input.equalsIgnoreCase("quit")) {
                    System.out.println("Goodbye");
                }
                else {
                    System.out.println(run(input));
                }
            }
        }public static String run(String input){
            int indexOfSecondSpace=0;
            int indexOfOperation=0;
            String firstNumber="0";
            String secondNumber="0";
            String operator =input.substring(input.indexOf(" ")+1, input.indexOf(" ", input.indexOf(" ")+1));
            if (input.contains("+")==true){
                indexOfOperation=input.indexOf("+");
            }
            else if (operator.equals("-")){
                indexOfOperation=input.indexOf("-");
            }
            else if (operator.equals("*")){
                indexOfOperation=input.indexOf("*");
            }
            else if (operator.equals("/")){
                indexOfOperation=input.indexOf("/");
            }
            else if (operator.equals("^")){
                indexOfOperation=input.indexOf("^");
            }
            firstNumber=(input.substring(0,input.indexOf(" ")));
            secondNumber=(input.substring(input.substring(input.indexOf(" ",input.lastIndexOf(" ")+1)+1)));
            int a, b, c, d;
            a=b=c=d=0;
            if (firstNumber.contains("/")){
                a=Integer.parseInt(firstNumber.substring(0, firstNumber.indexOf("/")));
                b=Integer.parseInt(firstNumber.substring(firstNumber.indexOf("/"), firstNumber.indexOf(" ")));
            }
            else if (!firstNumber.contains("/"))
                a=Integer.parseInt(input.substring(0, input.indexOf(" ")));
                b=Integer.parseInt("1");
            {
                if (secondNumber.contains("/")){
                    c=Integer.parseInt(secondNumber.substring(secondNumber.indexOf("/")));
                    d=Integer.parseInt(secondNumber.substring(secondNumber.indexOf("/"+1,secondNumber.length())));
                }
                else if (!secondNumber.contains("/")){
                    c=Integer.parseInt(secondNumber.substring(secondNumber.length()));
                    d=Integer.parseInt("1");
                }
            }
        }
        public static String calculate(String input, int a, int b, int c, int d){
            if (input.contains ("+"))
            {
                System.out.println(" answer  " + (a*d + b*c)+"/" +(b*d));
            }
            else if  (input.contains("-"))
            {
                System.out.println(" answer  " + (a*d - b*c)+ "/" +(b*d));
            }
            else if (input.contains("/"))
            {
                System.out.println(" answer  " + (a*d)/(b*c)+ "/" +(b*d));
            }
            else if (input.contains("*"))
            {
                System.out.println(" answer  " + (a*c) +"/" +(b*d));
            }

            return input;
        }
    }

Solution

  • The problem is here :

    secondNumber=(input.substring(input.substring(input.indexOf(" ",input.lastIndexOf(" ")+1)+1)));
    

    substring returns a String object, but needs an int argument, so your statement is equivalent to :

     String someString = input.substring(input.indexOf(" ",input.lastIndexOf(" ")+1)+1);
     secondNumber=(input.substring(someString));
    

    which is not valid.

    Note that your run method should return a String, but you're returning nothing in this method.