【问题标题】:Java Algorithm regarding taking array of String and Integers to关于获取字符串和整数数组的 Java 算法
【发布时间】:2016-01-14 06:53:15
【问题描述】:

我目前正在做一个需要我写这个的活动:

为静态方法 stringHeads 编写一个定义,该方法输入一个整数数组 p 和一个字符串 s。对于 p 中的每个整数 n,该方法构建由 s 中的前 n 个字符组成的子字符串(或整个 s,如果 n 大于 s 的长度)。该方法返回这些子字符串的数组。

我的代码目前是这样的:

public static String[] stringHeads(int[] p, String s) {
    String[] rad = new String[p.length];
    int e = 0;
    for (int b : p)
        e = b - 1
    for (int de = 0; rad.length > de; de++)
        rad[de] = s.substring(0,e);
    for (String str : rad)
        return str;
} 

//Just ignore the rest
int[] a = {4, 2, 3, 2, 0 };
String b = "Radon"
stringHeads(a,b)

输出应该是 "Rado" , "Ra", "Rad", "Ra", ""。

我目前遇到的错误是 String 无法转换为 String[]。

基本上我的问题是如何修复这个错误以及是否可以编写更好的代码。

【问题讨论】:

  • 您的 stringHeads() 返回类型是 String[] 但您返回的是字符串。您应该完全传递完整的字符串数组。
  • return rad .......
  • return str; 替换为return rad;。删除最后一个循环。
  • 导致您的错误是因为它期望返回类型为String[],但是您尝试遍历rad 并分别返回每个String str(因为它无论如何都不起作用)该方法在到达第一个return 语句后终止)。您应该可以改用return rad;

标签: java arrays string algorithm


【解决方案1】:

三件事:

  • 如果您进入第二个循环,e 将保持不变。
  • e 可能大于 s.length() - 你没有处理这种情况。
  • 您返回的是 String 而不是 String[]

如果您使用循环,请始终使用大括号,即使循环仅包含一个语句。它更具可读性并且可以避免错误。

我认为你将不得不重新考虑你的整个职能。不知道写这个函数对你有没有帮助。

提示: 只写一个循环!

String[] rad = new String[p.length];
for (int i=0; i < p.length; i++) {
    if (s.length() < ??) {
        rad[i] = s.substring(0,??);
    } else {
        ??
    }
}
return rad;

我希望这能帮助你自己得到答案。

【讨论】:

    【解决方案2】:

    请参阅下面的代码,希望对您有所帮助:-
    我提供了 cmets,而不是在段落中解释它。
    至于您的错误,您正在从方法返回字符串,但预期是一个字符串数组。

    public static void main(String[] args){
    
           int[] a = {4, 2, 3, 2, 0 };
           String b = "Radon";
           String[] output=stringHeads(a,b);
           for(String s:output){
               System.out.println(s);
           }
       }
    

    你的方法可以如下:

    public static String[] stringHeads(int[] p, String s) {
        String[] rad = new String[p.length];
        int e = 0;
        //Iterate over integer array
        for(int index=0; index<p.length; index++){
           //Extracting the integer value from array one by one
           e=p[index];
           //If integer value is greater than String length
           if(e>s.length()){
               //Put the entire String in String array
               rad[index]=s;
           }else{
               //Put the Substring value with range 0 to e i.e. integer value
               rad[index]=s.substring(0,e);
           }
        }
        return rad;
        } 
    

    【讨论】:

    • 好的,这就是整个函数,就像我之前写的一样。 index&lt;p.length-1 是错误的。不应该是index&lt;p.length吗?
    【解决方案3】:

    您可以通过仅使用带有替代变量的单次迭代来简化代码。

    public static void main (String[] args) throws java.lang.Exception
    {
        int[] a = {4, 2, 3, 2, 0 };
        String b = "Radon";
        String[] result = stringHeads(a,b);
        for(String x : result) System.out.println(x);
        //Or you can write a separate display method instead.
    }
    public static String[] stringHeads(int[] p, String s) 
    {
    
        String[] rad = new String[p.length];
        //Use this variable for array allocation/iteration.
        int i=0;
        //Simply iterate using this for-each loop.
        // This takes care of array allocation/ substring creation.
        for (int x : p)
            rad[i++] = s.substring(0,x);
        return rad; 
    }
    

    【讨论】:

    • 感谢您的代码,我觉得您的代码对我来说是最容易理解的,而且,如果 x 大于 s 的长度,我不需要遍历索引,所以我这样做了:public static String[] stringHeads(int[] p, String s) { String[] rad = new String[p.length];诠释 i = 0; for (int x : p) { if (x > s.length()) { rad[i++] = s; } 否则 rad[i++] = s.substring(0, x); } 返回弧度; }
    • 是的,那会很好,不客气,我非常乐意提供帮助:D
    【解决方案4】:

    请检查下面的代码

    public static String[] stringHeads(int[] intArray, String str) {

        String[] result = new String[intArray.length];
                int count=0;
        for (int intValue : intArray)
    
            {       
    
            result[count] = str.substring(0,intValue);
            count++;
            }
        return result;
        } //Just ignore the rest
    
        public static void main(String[] args) {
            int[] a = {4, 2, 3, 2, 0 };
            String b = "Radon";
            String[] strArray=stringHeads(a,b);
            int count=0;
            for(String str:strArray)
                System.out.println(++count+"" +str);        
        }
    

    【讨论】:

    • 您应该考虑修复代码缩进。第一行代码被排除在代码块之外
    【解决方案5】:

    像这样改变你的方法

    public static String[] stringHeads(int[] p, String s) {
            String[] rad = new String[p.length];
            int e = 0;
            for (int b : p) {
                rad[e] = s.substring(0, b);
                e++;
            }
    
    
            return rad;
        }
    

    使用此方法

    public static void main(String[] args) {
    
            int[] a = {4, 2, 3, 2, 0};
            String b = "Radon";
            String[] stringHeads = stringHeads(a, b);
    
            for (String stringHead : stringHeads) {
                System.out.println(stringHead);
            }
        }
    

    输出是

    Rado
    Ra
    Rad
    Ra
    

    【讨论】:

    • 您的回答忽略了 b 可能大于 s.length()
    【解决方案6】:

    不需要for循环遍历整数数组p

    public static String[] stringHeads(int[] p, String s) {
        String[] rad = new String[p.length];
        for (int de = 0; de < p.length; de++){
            if (p[de] < s.length())
                rad[de] = s.substring(0,p[de]);
            else
                rad[de]=s;
        }
        return rad;
    }
    

    【讨论】:

    • 您的回答忽略了 p[de] 可能大于 s.length()
    • 如果不再使用int e,为什么还要保留它?更不用说它与 JornBuitink 的答案几乎相同(除了允许 OP 自己解决几个部分)
    • int e 是我忽略的一个错误,...在您发布该评论之前对其进行了很多编辑...我猜您没有刷新答案
    【解决方案7】:
    public static String[] stringHeads(int[] p, String s) {
            String[] rad = new String[p.length];
            int e = 0;
            for (int b : p) {
                if(b<=s.length()){
                rad[e] = s.substring(0, b);
    
                }
                     e++;
            }
    
    
            return rad;
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-10-21
      • 1970-01-01
      • 1970-01-01
      • 2020-02-08
      • 1970-01-01
      • 1970-01-01
      • 2019-01-17
      相关资源
      最近更新 更多