无法将伪代码转换为java

时间:2018-03-23 11:02:24

标签: java arrays string logic

我从朋友处获得了一些伪代码形式的测试代码。他请求我的帮助在这里发帖。

这是伪代码:

function g(string str) returns string
  int i =0
  string new_str = ""
  while i < len(str) - 1
    new_str = new_str + str [i + 1]
    i++
   end
   return new_str
end

function f(string str) return string
  if len(str) == 0
    return ""
  else if len(str) == 1
    return str
  else 
    return f(g(str) + str [0]
  end
  end

function h(int n, string str) returns string
whlie n != 1
  if n % 2 == 0
    n = n/2
  else
    n = 3 * n + 1
  end
  str = f(str)
  end
    return str
end

function pow(int x, int y) returns int
  if y == 0
    return 1
  else 
    return x * pow(x, y-1)
  end
end

print (h(1, "fruits"))
print (h(2, "fruits"))
print (h(5, "fruits"))
print (h(pow(2, 1000000000000000), "fruits"))
print (h(pow(9831050005000007), "fruits"))

我试图将其转换为Java语法,但我在第20行和第32行中遇到错误,其中说:

  

不兼容的类型:字符串无法转换为字符串[]

这里是我做的代码:

public class TestLogic{
    public  String g(String[] str){
        int i=0;
        String new_str = "";
        while(i < (str.length -1)){
            new_str += str[1 + i];
            i = i + 1;   
        }
        return new_str;
    }

    public String f(String[] str){
        if (str.length == 0) {
            return "";
        }
        else if (str.length == 1){
            return str.toString();
        }
        else {
            return f(g(str)) + str [0];
        }
    }

    public static String h (int n, String str){
        while(n!=1){
            if (n%2==0){
                n= n/2;
            }
            else{
                n =3*n +1 ;
            }
            str = f(str);
        }
        return str;
    }

    public static int pow(int x, long y){
        if (y==0) {
            return 1;
        }
        else{
            return x * pow(x, y-1);
        }
    }

    public static void main(String[] args) {
        System.out.print(h(1, "fruits"));
        System.out.print(h(2, "fruits"));
        System.out.print(h(5, "fruits"));
        System.out.print(h(pow(2, 1000000000000000l),"fruits"));
       System.out.print(h(pow(2, 9831050005000007l),"fruits"));

    }
}

在这里要清楚,我不是程序员。我是Java和编程世界的新手。

2 个答案:

答案 0 :(得分:4)

你的朋友在他的例子中没有使用String-Array(使用另一种编程语言),他使用普通的String。

当他访问带括号string [i + 1]的字符串时,java中的translatet代码将为string.charAt(i+1)。所以只需将String-Arrays更改为普通String。

答案 1 :(得分:0)

在f和g中,你传给一个参数aj数组的字符串(String []) 字符串不能转换为字符串的aj数组,因此如果删除这两个函数的参数类型中的[]括号,它应该可以工作。