2015-05-22 4 views
-1

Это моя попытка исправить коэффициент любой переменной математического уравнения для суммарных коэффициентов тех же переменных, что и «x^2 + x^2 + 2x-x-25» как «+ 1x^2 + 1x^2 + 2x-1x-25 ", а затем сделайте суммирование« 2x^2 + x-25 », Обратите внимание, что я выполнил процесс суммирования по другому методу.Как преобразовать нулевые коэффициенты для переменных в уравнениях «x^2 + x^2 + 2x-x-25» как «+ 1x^2 + 1x^2 + 2x-1x-25"?

private static String fixCoeff(String equ) 
{ 
    equ=equ.toLowerCase();//change equation variables to lower case 
    equ=equ.trim();//remove white spaces 
    String []characters={"a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z"}; 
    int index=-1; 
    String fixedCoeff=""; 
    for (int i = 0; i < characters.length; i++) 
    { 
     if(!equ.contains(characters[i])) 
     { 
      continue; 
     } 
     //if a not found in equ i++ 
     //if true execute this 
     while(equ.indexOf(characters[i],++index)!=-1) 
     { 


      index=equ.indexOf(characters[i]); 
      if(index==0) 
      { 
       fixedCoeff+="+1"+equ; 
       equ=fixedCoeff; 
       index=2; 
       break; 

      } 
      else 
      { 

       if (equ.charAt(index-1)=='+'||equ.charAt(index-1)=='-') 
       { 
        fixedCoeff=equ.substring(-1,index-1); 
        fixedCoeff+="1"+equ.substring(index-1,equ.length()-1); 
        equ=fixedCoeff; 
        index++; 
        break; 
       } 

      } 

     // if (index==equ.length()-1) {//if we found last element in equ is a variable 
       //break; 
      //} 
     }//end while 

    }//end for loop 


    return equ; 

}//end fixCoeff 

входные случаи:

  1. а
  2. х
  3. х^2
  4. х^2 + х^2

выходные случаи:

  1. + 1a
  2. + 1x
  3. + 1x^2
  4. + 1x^2 + 1x^2
+0

Что делает ваш вывод кода? На ваш вопрос легче ответить, если вы расскажете нам, что происходит. – CubeJockey

+0

@Trobbins отредактировал – user1854282

+0

@ user1854282 проверить мой ответ, он выполняет то, что вы хотите, с меньшим количеством строк кода. – brso05

ответ

2

просто добавить до @ brso05 ответ,

это еще один способ сделать это:

String s ="x^2+x^2+2x-x-25"; 
    s=s.replaceAll("(?<!\\d)([a-z])", "1$1"); // <-- replaces any lower letters with 1 concatanted with the same letter 
    if(!s.startsWith("-")){ 
     s="+"+s; //<-- if the first character is not negative add a + to it. 
    } 
    System.out.println(s); 

выход:

+1x^2+1x^2+2x-1x-25 
+0

славная петля! мне это нравится – brso05

1

Вы можете сделать это намного проще с помощью String.replaceAll() вроде этого:

for (int i = 0; i < characters.length; i++) 
{ 
    if(!equ.contains(characters[i])) 
    { 
     continue; 
    } 
    equ = equ.replaceAll(("(?<!\\d)" + characters[i]), ("1" + characters[i])); 
} 
if(!equ.startsWith("-") && !equ.startsWith("+")) 
{ 
    equ = "+" + equ; 
} 

Это заменит символ, в котором перед ним нет цифры с 1x (или whate ver текущий символ). Это использует регулярное выражение с отрицательным lookbehind, чтобы убедиться, что перед символом нет цифр, затем он заменит на 1 (символ).

Вот самодостаточным пример:

String line = "x-x^2+3x^3"; 
line = line.replaceAll("(?<!\\d)x", "1x"); 
System.out.println("" + line); 

Это будет выводить 1x-1x^2+3x^3.