从一个类中调用一个函数"整理"

时间:2014-09-20 00:40:16

标签: java class

如何更改我对函数collat​​e的调用,我希望它打印出collat​​e(“hello”,“there”)是“htehlelroe”。

public class Collate {

    public static void main(String[] args) {
        String a = new String("hello");
        String b = new String("there");          
    }

    public String collate(String a, String b) {
        String collate = new String();
        for (int i = 0; i < a.length(); i++) {
            collate = collate + a.substring(i);
            collate = collate + b.substring(i);
            collate(a, b);
            System.out.println(collate);
        }
        return collate;
    }
}

2 个答案:

答案 0 :(得分:0)

这样做

public class Collate {

    public static void main(String[] args) {
        String a = new String("hello");
        String b = new String("there");          
        System.out.print(collate(a,b));
    }

    public static String collate(String a, String b) {
        String collate = new String();
        for(int i=0;i<a.length();i++){
            collate += a.charAt(i);
            collate += b.charAt(i);
        }

        return collate;
    }
}

答案 1 :(得分:0)

以下代码应该做你想要的。

我们必须在您的代码中更改内容:

    如果我们想直接从另一个静态方法调用它,那么
  • collat​​e必须是静态的,即main

  • 你用相同的参数递归调用collat​​e。事实上,我们只想整理字符串的提醒(一旦我们拍摄了第一个字符

  • 你只是假设a和b的长度相等,只是试图在a的长度上循环。您应该始终陈述关于方法参数的假设。如果你用长于b的方式调用collat​​e方法,你可能就不会得到你想要的东西了

  • 不应该调用新字符串(&#34;某些&#34;)。这将创建一个字符串类型的新实例。 Java中的字符串是不可变的,因此没有理由这样做。虽然新的String()不会影响程序的语义,但它会对其性能产生严重影响,尤其是在循环中创建字符串时。

    public class Collat​​e {

    public static void main(String[] args) {
        String a = "hello";
        String b = "there";
        System.out.println(collate(a, b));
    }
    public static String collate(String a, String b) {
        if (a.length() != b.length())
            throw new IllegalArgumentException("Cannot collate strings of unequal size");
        if (a.isEmpty())
            return "";
        else {
            String collate = "";
            StringBuilder result = new StringBuilder();
            char firstCharacterOfA = a.charAt(0);
            char firstCharacterOfB = b.charAt(0);
            result.append(firstCharacterOfA);
            result.append(firstCharacterOfB);
            result.append(collate(a.substring(1), b.substring(1)));
            return result.toString();
        }
    }
    

    }

编辑:请注意,递归可能会在此处终止您的应用程序。如果传递的字符串很大,则可以遇到StackOverflow。此外,性能可能会受到影响,因为方法调用的成本很低。

如果你用迭代编写你的方法,例如像Ankush那样使用for循环,你将没有这样的问题。