2013-11-12 1 views
1

Итак, у меня есть массив двойников, представляющих коэффициенты многочлена. Я хочу иметь функцию, которая возвращает строку многочлена.Можно использовать итерацию для создания строки в Java?

Так coeffs = [1,3, 4,5, 6,0]

функция будет производит строку

"1.3x^2 + 4.5x + 6,0"

Я думал о итерации, чтобы решить эту проблему, но я продолжаю получать ошибки. Предположим, что array coeffs уже построен.

public String toString() 
{ 
    int len = coeffs.length; 
    return 
    for(int i = 0; i < len ; ++i) 
    { 
     for(int j = len; len > 0; len--) 
     { 
      return this.coeffs[i] + "x^(" + len + ")" + ; 
     } 
    } 
} 
+2

Вы не можете «возвращать» цикл в Java. Постройте строку в своем цикле с помощью 'StringBuilder', а затем верните ее. –

ответ

0

попытка ниже код:

public String toString(){ 
int len = coeffs.length; 
StringBuilder sb=new StringBuilder(); 
return 
    for(int i = 0; i < len ; ++i){ 
      for(int j = len; len > 0; len--){ 
       return sb.append(this.coeffs[i] + "x^(" + len + ")"); 

        } 
     } 
    } 
0

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

public String toString() 
{ 
    int len = coeffs.length; 
    String result = ""; 
    int j = coeffs.length-1; 

    for(int i = 0; i < len ; ++i) 
    { 
     result += coeffs[i]+"x^("+j+")+" ; 
     j--; 
    } 

    return result.substring(0,result.length-1); 
} 
2
public String toString(){ 
    int len = coeffs.length; 
    StringBuilder return_value =new StringBuilder(); 

    // Add all the x to the power of something 
    for(int i = 0; i < len-1 ; i++) 
     return_value += this.coeffs[i]+"x^"+len-i-1+ " + "; 

    // last one has no x. 
    return_value += this.coeffs[len-1]; 
} 

Вы также можете поставить еще один случай, если вы не хотите иметь 2x^2 + 3x^1 + 5; (Это так, то х будет частный случай, а)

Edit:
Как Kewin предположил, это будет сгенерировано исключение составляет длина 0.
Примечания вам придется обрабатывать крайние случаи, и подумайте о том, что произойдет, если один из коэффициентов равен 0 (вы должны просто пропустить эту итерацию) :)

+0

У вас будет исключение, если длина массива равна 0. –

+0

True. Вы думаете, что он может понять, что он? Я уверен, что будут другие проблемы, например, что вы делаете, если коэффициенты равны 0? вы не должны показывать 0x^n ... но он этого не спрашивал. Я предполагаю правильный простой ввод там ... возможно, я добавлю это к ответу ... – Noctis

0

Как насчет этого?

public String toString(){ 
    int len = coeffs.length; 
    StringBuilder result = new StringBuilder(); 
    for(int i = 0; i < len; ++i){ 
      int power = ((i-len+1)*-1) 
      result.append("" + coeffs[i] + "x^(" + power + ")"); 
      if (i < (len - 1)){ result.append(" + "); } 
    } 
    return result.toString(); 
} 

дает

1.3x^(2) + 4.5x^(1) + 6.0x^(0) 

Я не уверен, если это формат, который вы хотите, однако (?)

0

Как насчет этого?

public String toString(){ 
    int len = coeffs.length; 
    String equation = ''; 
    String power = ''; 
    for(int i = len - 1; i > 0; i--) { 
    power = (i > 1 ? 'x^' + i : 'x'); 
    equation += (coeffs[len - 1 - i] + variable + " "); 
    } 
    equation += coeffs[0]; 
} 
0

Вы можете попробовать это:

double[] coeffs = { 1.3, 4.5, 6.0 }; 

    StringBuilder sb = new StringBuilder(); 

    int len = coeffs.length; 

    for (int i = 0; i < len - 1; i++) { 
     sb.append(coeffs[i]).append('x'); 
     if (len - 1 - i == 1) { 
      sb.append('+').append(' '); 
     } else { 
      sb.append('^').append(len - i - 1).append('+').append(' '); 
     } 
    } 
    sb.append(coeffs[len - 1]);// Append last element 

    System.out.println(sb.toString());// Print "1.3x^2 + 4.5x + 6.0" 

результат вывода в консоли:

1.3x^2+ 4.5x+ 6.0 
0

Вы можете попробовать это, как хорошо.

float[] coeffs = new float[]{1.4f, 1.3f, 4.5f, 6.0f}; 
if (coeffs == null || coeffs.length == 0) { 
    return; 
} 
int power = coeffs.length - 1; 
StringBuilder stringBuilder = new StringBuilder(); 
for (int i = 0; i < coeffs.length; i++) { 
    if(power == 0) { 
     stringBuilder.append(" + " + coeffs[i]); 
    } else if(power == 1) { 
     stringBuilder.append(" + " + coeffs[i] + "x"); 
    } else { 
     stringBuilder.append(" + " + coeffs[i] + "x^" + power); 
    } 
    power--; 
} 
System.out.println(stringBuilder.substring(3)); 
0
double [] coeff = {1.34,2.4,5.6}; 
String finalStr = ""; 

if(coeff.length>0){ 
    for(int i=coeff.length-1,j=0;i>=0 && j<coeff.length;i--,j++){ 
     finalStr = finalStr+coeff[j]+" "+"x^"+i+" + "; 
     finalStr = (i==0)?finalStr.replace("x^0 + ", ""):finalStr; 
    } 
} 

Сформировать finalStr в 1.34 x^2 + 2.4 x^1 + 5.6

0

Что об этом

public static String polyToString() { 
    double[] coeffs = new double[] { 0.1, 0.2, 0.3, 1.1, 2.2, 1.3, 4.5, 6.0 }; 
    int len = coeffs.length; 
    StringBuilder sb = new StringBuilder(); 

    if(len==0) 
    return ""; 
    if(len==1) 
    return ""+coeffs[0]; 

    for (int i = 3; i <= len; i++) { 
    sb.append(coeffs[len - i] + "x^" + (len - i + 2) + " + "); 
    } 

    if (len >= 2) { 
    sb.append(coeffs[len - 2] + "x + " + coeffs[len - 1]); 
    } 
    return sb.toString(); 

}

Out

1.3x^7 + 2.2x^6 + 1.1x^5 + 0.3x^4 + 0.2x^3 + 0.1x^2 + 4.5x + 6.0 
0

Возможно, что-то похожее на следующие строки. Строго говоря, приведенный ниже код не использует итерацию. Можно перебрать массив значений. Однако наличие целого числа для текущего значения индекса облегчает определение необходимости «x» и правильного формата экспонента (если есть).

public final class Test1 { 
    /* 
    * The main routine is where execution actually starts 
    */ 
    public static void main(String[] args) { 
    System.out.println((new Coeffs()).toString()); 
    } 
} 

class Coeffs { 
    double[] values = new double[] {1.3, 4.5, 6.0}; 
    public String toString() { 
    int     valuesLen = values.length; 
    int     exponent; 
    StringBuffer  result = new StringBuffer(); 
    for (int i = 0; i < valuesLen; i++) { 
     if (result.length() > 0) 
     result.append(" + "); 
     result.append(((Double) values[i]).toString()); 
     exponent = valuesLen - i - 1; 
     if (exponent > 0) 
     result.append("x"); 
     if (exponent > 1) { 
     result.append("^"); 
     result.append(((Integer) exponent).toString()); 
     }   
    } 
    return new String(result); 
    } 
} 
Смежные вопросы