【问题标题】:Possible to use iteration to produce a string in Java?可以使用迭代在 Java 中生成字符串吗?
【发布时间】:2013-11-12 06:23:16
【问题描述】:

所以我有一个双精度数组,它们代表多项式的系数。 我想要一个返回多项式字符串的函数。

所以 系数 = [1.3, 4.5, 6.0]

函数会产生一个字符串

“1.3x^2 + 4.5x + 6.0”

我一直在考虑通过迭代来解决这个问题,但我不断出错。假设数组 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 + ")" + ;
        }
    }
}

【问题讨论】:

  • 你不能return Java 中的循环。使用StringBuilder 在循环中构建字符串,然后返回它。

标签: java string iteration


【解决方案1】:
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,你也可以换个case; (所以,x 也是一个特例)

编辑:
就像 Kewin 建议的那样,如果长度为 0,这将引发异常。
请注意,您必须处理极端情况,并考虑如果其中一个系数为 0 会发生什么(您应该跳过该迭代):)

【讨论】:

  • 如果数组的长度为 0,就会抛出异常。
  • 是的。你觉得他能猜到那个吗?我敢肯定还会有其他问题,比如如果 coeffs 为 0,你会怎么做?你不应该显示 0x^n ...但他没有要求。我假设那里有正确的简单输入......也许我会把它添加到答案中......
【解决方案2】:

试试下面的代码:

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 + ")");

                    }
        }
    }

【讨论】:

    【解决方案3】:

    如前所述,您不能返回循环。你必须做这样的事情

    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);
    }
    

    【讨论】:

      【解决方案4】:

      这个怎么样?

      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];
      }
      

      【讨论】:

        【解决方案5】:

        你可以试试这个:

          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
        

        【讨论】:

          【解决方案6】:

          你也可以试试这个。

          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));
          

          【讨论】:

            【解决方案7】:

            这个怎么样?

            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)
            

            我不确定这是否是您想要的格式(?)

            【讨论】:

              【解决方案8】:

              类似于以下内容的内容可能是您正在寻找的内容。严格来说,下面的代码不使用迭代。可以遍历 values 数组。但是,为当前索引值设置一个整数可以更容易地确定是否需要“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);
                }
              }
              

              【讨论】:

                【解决方案9】:
                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

                【讨论】:

                  【解决方案10】:

                  这个呢

                   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();
                  

                  }

                  出来

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

                  【讨论】:

                    猜你喜欢
                    • 1970-01-01
                    • 2017-03-09
                    • 1970-01-01
                    • 2013-12-13
                    • 2023-03-18
                    • 2018-06-25
                    • 2020-12-13
                    • 1970-01-01
                    • 2018-10-15
                    相关资源
                    最近更新 更多