2013-11-27 3 views
-3

Моя домашняя работа над благодарением заключается в том, чтобы сделать калькулятор фракций, который принимает ввод, и дает ответ , например 1/2 + 1/4 = 3/4 , но когда я вводим ввод, я получаю ошибку:Ошибка калькулятора Java Fraction

Ошибка Начало: Исключение в потоке «основной» java.lang.Error: Нерешенные проблемы компиляции: метод подстрока (INT) в тип String, не применяется для аргументов (String)

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

Может кто-нибудь объяснить мне, в чем проблема?

См код ниже:

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; 
     } 
    } 
+1

ли Вы, прочитать сообщение об ошибке? 'Метод substring (int) в типе String неприменим для аргументов (String)' –

+0

Вы заметили, что все операции печатаются '/'? – alfasin

+0

@alfasin, вероятно, так, это, кажется, калькулятор рациональных чисел, а 'x/y' - способ написать рациональное число. –

ответ

1

Проблема здесь:

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

substring возвращает String объект, но нуждается в int аргумент, поэтому ваше утверждение эквивалентно:

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

что недействительно.

Обратите внимание, что ваш метод run должен вернуть String, но вы ничего не возвращаете в этом методе.

0

Вы передаете строку в методе подстроки строки класса, которые имеют два более загруженной версии

substring(int beginIndex) 

и

substring(int begin , int end) 

пожалуйста, передайте только целые числа к методу подстроки

Смежные вопросы