2012-10-26 6 views
0

나는 [1 + 2/3 * 5-4] 형식으로 사용자 입력을 받아들이는 계산기를 만들어야하는 숙제를 가지고있다. 배열을 사용하여 문자열의 값을 저장하지 않아도됩니다. 대신에 한 번에 3 개의 숫자와 2 개의 연산자를 사용하기로되어 있습니다. 내 질문은 내가 어떻게 숫자와 연산자를 저장하고 일단 내가 그들을 저장하고 값을 계산 원래 숫자에서 새로운 번호와 새로운 연산자를 얻을 q입니다. 이것은 내가 지금까지 옳은 방향으로 가고 있는지 확실하지 않은 것입니다.어떻게 배열없이 java에서 문자열을 분할합니까?

public class ExpresionEvaluation { 

    private static String expresion; 
    static double o1; 
    static double o2; 
    private static double o3; 
    private static char operator1; 
    private static char operator2; 

    public static double getO1(String s){ 
     s=s.trim(); 
     String r =""; 
     while (s.length()>0 && s.charAt(0)>='0' && s.charAt(0)<='9'){ 

      r = r + s.charAt(0); 
      s = s.substring(1); 


     } 
     o1 = Double.parseDouble(r); 
     return(o1); 
    } 

    public static char getOperator1(String s){ 
     s=s.trim(); 
     char r; 
     while (s.length()>0 && s.charAt(0)>='0' && s.charAt(0)<='9'){ 

      r = s.charAt(1); 
      s = s.substring(2); 


     } 
     r = operator1; 
     return(r); 
    } 

    public static double getO2(String s){ 


     s=s.trim(); 
     String r =""; 
     while (s.length()>0 && s.charAt(0)>='0' && s.charAt(0)<='9'){ 

      r = r + s.charAt(2); 
      s = s.substring(3); 


     } 
     o2 = Double.parseDouble(r); 

     return(o2); 
    } 


    public static char getOperator2(String s){ 
     s=s.trim(); 
     char r; 
     while (s.length()>0 && s.charAt(0)>='0' && s.charAt(0)<='9'){ 

      r = s.charAt(3); 
      s = s.substring(4); 


     } 
     r = operator2; 
     return(operator2); 
    } 

    public static double getO3(String s){ 


     s=s.trim(); 
     String r =""; 
     while (s.length()>0 && s.charAt(0)>='0' && s.charAt(0)<='9'){ 

      r = r + s.charAt(4); 
      s = s.substring(5); 


     } 
     o3 = Double.parseDouble(r); 

     return(o3); 
    } 
} 
+0

건방진 대답 : 대신'LinkedList's를 사용하십시오. – Anko

+0

계산기 입력이 유효합니까? [1 + 2 * 5-4 + 3 * [2-4 * 2]] – aphex

+0

유효합니다. –

답변

0

기술적으로는 컬렉션 클래스를 사용하여 우회 할 수 있습니다. java.util 패키지에는 배열의 동작을 에뮬레이트하지만 크기를 재조정하고 훨씬 더 많은 기능을 제공하는 많은 클래스가 있습니다. 이것들은 java.util.ArrayList, java.util.LinkedList, java.util.Vector (그 것을 사용하지 마십시오), java.util.Stack을 포함합니다. 자바 컬렉션 프레임 워크는 매우 광범위하고, 나는 당신이 두 컬렉션을 사용할 수없는 경우, 내가 생각할 수있는 유일한 것은 하나의 큰 문자열을 사용하여 일부를 삽입한다

http://docs.oracle.com/javase/tutorial/collections/implementations/index.html

에서 문서를 읽어 보시기 바랍니다 별도의 섹션 사이에 특수 문자 또는 시퀀스의 종류, 다음 섹션을 통해이 같은 것을 반복하는 같이 IndexOf (문자, fromIndex의) 및 문자열을 사용하여 :

final int maxwords = 5; 
    String strlist = "[email protected]@[email protected]@[email protected]"; 
    int lastindex = 0, index = 0; 
    for(int n= 0; n < maxwords; n ++){ 

      index = strlist.indexOf("@",lastindex); 
      String substr = strlist.substring(lastindex,index); 
      //process substring here 
      System.out.println(substr); 
      lastindex = index + 1; 
     } 

이 일을 매우 추한 방법을, 하지만 그게 내가 생각할 수있는 유일한 것. 희망이 도움이됩니다.

관련 문제