2013-05-11 4 views
1

Java에서 CNF 연산자를 수행하려고하는데 동등한 오류가 있습니다.Java에서 cnf 연산자를 어떻게 수행합니까?

첫째, 나는 소프트웨어의 대부분을했지만 완전히하지는 않았다.

내 코드는 여기에 있습니다 :

import acm.program.*; 
public class split extends ConsoleProgram{ 
public void run() 
{ 
    String veri  = "(p or q or s or t or k) and (p or q)"; 
    String yeni  = tekrarsil(parcala(veri)); 

    int []sayilar = new int[yeni.length()]; 
    for (int i = 0; i < yeni.length(); i++) { 
     sayilar[i] = readInt("give a number for "+yeni.charAt(i)+" :"); 

    } 
    for (int i = 0; i < sayilar.length; i++) { 
     println(sayilar[i]); 
    } 
} 

public String parcala(String veri) 
{ 
    String yenistr = ""; 
    String yeni[] = veri.split("and"); 
    for (int j = 0; j < yeni.length; j++) { 
     String yveri[] = yeni[j].split("or"); 
     for (int i = 0; i < yveri.length; i++) { 
      yveri[i] = yveri[i].trim(); 
      if(i==0){ 
       yenistr = yenistr.concat(yveri[i].substring(1)); 

      }else if(i==yveri.length-1){ 
       yenistr = yenistr.concat(yveri[i].substring(0,yveri[i].length()-1)); 

      }else{ 
       yenistr = yenistr.concat(yveri[i]); 

      } 
     } 
    } 
    return (yenistr); 
} 
public String tekrarsil(String S) 
{ 
     for (int i = 0; i < S.length(); i++) 
      for (int k = i+1; k <= S.length()-1; k++){ 
       if (S.charAt(i) == S.charAt(k)) 
       { 
        S = S.substring(0,k)+ S.substring(k+1,S.length()); 
        k--; 
       } 
      } 
     return S; 

    } 
    } 

문제는 평등이다.

프로그램에서 변수가 true 또는 false인지 확인해야합니다. 예컨대

: 1 (사용자가 다수의 온 (true) 또는 영 (false)을 수득한다)
보내기

는 P에 대한 번호 부여 : 노호처럼

(p or q or s or t or k) and (q or p) 

이 프로그램 수행 0에 대한 번호를 부여하십시오.
s에 대한 번호를 지정하십시오. 1
t에 대한 번호를 지정하십시오.
k에 대한 번호를 지정하십시오. 0
(변수가 둘 이상을 사용하는 경우 프로그램에서 한 번만 묻습니다.)

이러한 변수를 보면 (1 또는 0 또는 1 또는 0 또는 0)과 (1 또는 0) 을 볼 수 있습니다. 사실로 돌아가지만 나는 이것을 할 수 없다. 나는 그것을하는 방법을 이해할 수 없다.

최고의 소원.

+1

항상 소스 코드는 100 % 영어로 작성해야합니다. 이것에 대한 이유는 전문적인 표준이되고 또 다른 것은 다른 사람들이 그것을 이해하게하고 더 많은 것이있을 수 있습니다 ... – Powerslave

+0

문제라면 코드를 바꿀 수 있습니다. 나는 그것이 중요하지 않다고 생각한다. – CWOmer

+0

그러나 귀하의 의견을 기쁘게 생각하며 귀하의 도움을 기다리고 있습니다 – CWOmer

답변

2

this solution 현재 요구 사항에 맞게 수정하십시오.

또는, 원유 해결 방법으로, 당신은 단순히 등, &&, || 같은 사업자에게 작업의 텍스트 표현을 변경, 자바 스크립트 엔진으로 Rhino를 사용하여 JS 엔진은 평가하고 당신에게 결과를 가질 수있다.

표현식의 출력 값에만 관심이 있다면 위 내용만으로 충분할 것입니다.

자신 만의 알고리즘을 고안해야하는 경우 지루한 작업이지만 가능하면 파서를 작성해야합니다.

사용자가 연산자와 함께 모든 표현식을 입력하게하십시오 (구현 관점과 크게 다르지 않음). 물론 입력을 확인해야합니다. 처리해야하는 데이터는 0, 1, 괄호 (결과 스태킹/언 스택) 및 연산자 (물론 공백이 있지만 무시해야 함)입니다.

기본적으로 왼쪽에서 오른쪽으로 평가하면 첫 번째 데이터 매개 변수 (0, 1)를 가져 와서 현재 결과에 넣습니다. 그런 다음 연산자을 읽고 결과와 다음 데이터에 적용합니다. 입력이 끝날 때까지 계속됩니다.괄호이 발생하면 가장 간단한 방법은 파서가 괄호 안에있는 표현식을 재귀 적으로 호출하여 (이를 일치시켜야 함) 반환 값을 서수 데이터로 처리하도록하는 것입니다.

+0

관심을 가져 주셔서 감사합니다. 그러나 다른 라이브러리를 사용할 수 없습니다. 나는 당신이 문제를 이해했다고 생각하지만 나는 내 자신의 코드로해야만한다. – CWOmer

+0

그런 다음 [ScriptingEngine] (http://bit.ly/10BnRnw), [AbstractScriptingEngine] (http://bit.ly/17VhbWq) 및 [빙싱 (Bingdings)] (http://bit.ly/19eMV7L)을 사용하면 더 세밀한 접근법을 이해할 수 있습니다. 또한, ** [주제] (http://bit.ly/f4Xs2a)에서 (http://bit.ly/YOoxuz) [표현식] (http://bit.ly/15BDCTk) [구문 분석] (http://bit.ly/MZ0Co) **. 이것들은 내가 할 수있는 것보다 더 잘 설명합니다 (즉, "자신의 알고리즘을 고안해야하는 경우 *"). – Powerslave

관련 문제