2012-05-10 3 views
-2

Это калькулятор для простых арифметических операций, в которых используются только + и -. Логическая часть довольно проста, но я смущен, чтобы сказать, что код не работает. Вход с неизвестными цифрами. например: «4/2» или «42 + 34», оба должны быть приемлемыми. Мне не очень удобно со строками и их функциями, поэтому, пожалуйста, помогите. Спасибо! :)Почему этот код java не работает? простой калькулятор

/* 
*Calculator with only + and - 
*/ 
import java.util.Scanner; 

class Calculator { 
    public static String strng; 

    public static void main(String[]args){ 
     Calculator calc = new Calculator(); 
     calc.Calculator(); 
    } 

    public void Calculator() 
    { 
     int op1=0,op2=0,flag=0,index=0; 
     String Operator=null; 
     System.out.println("java calculator"); 
     Scanner sc=new Scanner(System.in); 

     strng= sc.nextLine(); 

     if(strng.indexOf("+")>0) { 
      Operator = "+"; 
      index=strng.indexOf("+"); 
      if(strng.lastIndexOf("+")!=index){ 
       Operator="++"; 
       flag=1; 
      } 
     } 
     else if(strng.indexOf("-")>0) { 
      Operator="-"; 
      index=strng.indexOf("-"); 
      if(strng.lastIndexOf("-")!=index){ 
       Operator="--"; 
       flag=1; 
      } 
     } else if(strng.indexOf("*")>0) { 
      Operator="*"; 
      index=strng.indexOf("*"); 
     } else if(strng.indexOf("/")>0) { 
      Operator="/"; 
      index=strng.indexOf("/"); 
     } 

     if((index>0)&&(flag==0)) { 
      op1=Integer.parseInt(strng.substring(0,index-1)); 
      op2=Integer.parseInt(strng.substring(index+1)); 
      Operation(Operator,op1,op2); 
     } 

     if(flag==1) { 
      op1=Integer.parseInt(strng.substring(0,index-1)); 
      op2=Integer.parseInt(strng.substring(index+2)); 
      Operation(Operator,op1,op2); 
     } else { //to separate the operator and operands string functions. 
      System.out.println("Invalid choice"); 
     } 
    } 


    public void Operation(String Operator, int operand1, int operand2) { 
     if(Operator.equals("+")){ Add(operand1,operand2); } 
     if(Operator.equals("-")){ Subtract(operand1,operand2); } 
     if(Operator.equals("*")){ Multiply(operand1,operand2); } 
     if(Operator.equals("/")){ Divide(operand1,operand2); } 
     if(Operator.equals("++")){ Increment(operand1); } 
     if(Operator.equals("--")){ 
      Decrement(operand1); 
     } else { 
      System.out.println("Invalid entry"); 
     } 
    } 


    void Add(int op1, int op2) { 
     System.out.println(strng+"="+(op1+op2)); 
    } 

    void Subtract(int op1, int op2) { 
     System.out.println(strng+"="+(op1-op2)); 
    } 

    void Increment(int op1) { 
     System.out.println(strng+"="+(op1+1)); 
    } 

    void Decrement(int op1) { 
     System.out.println(strng+"="+(op1-1)); 
    } 

    void Multiply(int op1, int op2) { 
     int ans=0; 
     int x = op1<op2?op1:op2; 
     int y = op1>op2?op1:op2; 
     for(int i=1;i<=x;i++){ 
      ans=ans+y; 
     } 
     System.out.println(strng+"="+ans); 
    } 

    void Divide(int op1, int op2) { 
     int count=0,rem=op1; 

     while(rem>=op2){ 
      rem=rem-op2; 
      count=count+1; 
     } 
     System.out.println(strng+"="+count); //return rem for modulo operand 
    } 

} 
+2

Пожалуйста, сушите проблему. –

+0

Это домашнее задание? Если да, пожалуйста, пометьте! –

+3

Как это не работает? Когда вы проходите код в отладчике, в какой момент наблюдаемое поведение отклоняется от ожидаемого поведения? – David

ответ

0

Я не комфортно с тем, как вы ищете символов в строке. Я бы посоветовал вам заглянуть в String.split(String regex), что позволит вам разделить символы и цифры.

+0

раскол..и посмотрим в него спасибо. – Suzuka

+0

, но не могли бы вы точно определить проблему здесь, пожалуйста, так что я не повторяю ее дальше. Я боюсь, что мои основы не очень ясны. ^.^' – Suzuka

+0

@Suzuka: Частично, вы разделяете свои строки для выполнения операций над ними (подстрока идет от [0, n), и вы предполагаете, что у вас есть nth символ, когда вы выполняете следующую подстроку). Использование 'String.split()' там, где это необходимо, помогло бы тоннам. – Makoto

-2

Вы вызываете конструктор право ... Конструктора оленья кожа поддержки пустота .. Надеюсь, что помогает

+0

Нет ... это вызов фактического метода. Я не вижу конструктора [custom], который объявляется/называется где-либо еще. – Makoto

+0

, поэтому я понимаю, что я прав именно так? – Suzuka

+0

@Suzuka Вы не можете назвать метод, использующий CamelCase. Это противоречит очень сильному соглашению на Java для использования lowerCamelCase для имен методов - см., Как вам удалось запутать elsa. –

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