如何使用递归将String转换为int

时间:2014-01-29 17:06:18

标签: java string recursion int

我想使用递归将String输入转换为int。这是我提出的代码,但如果我的输入是123456,它只返回124.如果我输入1234567,则会出错。

import java.util.*;
public class Problem1 {
static int x =0;
static int counter = 0;
//input
 public static void main(String[] args) {
 Scanner scan = new Scanner (System.in);
 String s= scan.nextLine();
 System.out.println(recursive(s));

}
 //recursive method
public static int recursive(String s){
    if(s.length()==1){
        x=(x*10)+ Integer.parseInt(s.substring(0,1));
        return x;
    }
    else{
        x = (x*10)+Integer.parseInt(s.substring(0,1));
        counter++;
        return recursive(s.substring(counter,s.length()-1));


    }

    }
}

8 个答案:

答案 0 :(得分:1)

import java.util.Scanner;

public class Problem1 {
    static int x = 0;
    static int counter = 0;

    // input
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        String s = scan.nextLine();
        System.out.println(recursive(s));

    }

    // recursive method
    public static int recursive(String s) {
        if (s.length() == 1) {
            x = (x * 10) + Integer.parseInt(s.substring(0, 1));
            return x;
        } else {
            x = (x * 10) + Integer.parseInt(s.substring(0, 1));
            counter++;
            return recursive(s.substring(1, s.length()));

        }

    }
}

答案 1 :(得分:0)

查看静态counter变量。你每次都在增加它。但是你只想让子串从1开始(所以切掉第一个“字母”)。

所以不要使用:

counter++;
return recursive(s.substring(counter,s.length()-1));

考虑使用:

return recursive(s.substring(1));  // you even don't really need the length

因为String s参数如下:

1st call: 1234567
2nd call: 234567
3rd call: 34567
4th call: 4567
...

所以,你只需要切掉第一个字母。

顺便说一下:你的样本“项目”非常有趣;)

答案 2 :(得分:0)

要开始的一些注意事项:

  1. 如果您正在进行递归,则可能不希望使用成员变量。这样做并没有错,但不是典型的模式(你的x变量)。
  2. 通过递归传递状态通常很方便,尽管你不必(也就是x的当前值)。
  3. 你的情况有点奇怪,因为你必须为每个子解析改变你当前的解析值(每次换10次);让它变得有点复杂。
  4. 如果您要将x保留为成员变量(在这种情况下似乎有意义),您不需要从递归中返回任何内容。
  5. 你能不能只使用Integer.parseInt()?
  6. 代码可以更加简单,例如:

     void recursive (String s)
     {
       if (s.length() == 0) return 0;
       x = x * 10 + Integer.parseInt(s.substring(0, 1));
       recursive(s.substring(1));
     }
    

答案 3 :(得分:0)

recursion("1234567", 0, 1)

上面的代码将使用递归将字符串“1234567”转换为int。您必须传递要转换的字符串,然后传递0和1.

public static int recursion(String s, int result, int place) {
    result += place * Integer.parseInt(s.charAt(s.length() - 1) + "");
    if(s.length() == 1) {
        return result;
    }
    else {
        return recursion(s.substring(0, s.length() - 1), result, place * 10);
    }
}

答案 4 :(得分:0)

public static int computeStr(String str) {
        if (str.equals("")) {
            return 0;
        }

        int x = 1;
        for (int i = 0; i < str.length() - 1; i++) {
            x = x * 10;
        }
        x = x * Integer.parseInt(str.substring(0, 1));
        return x + computeStr(str.substring(1));
    }

例如:“2432”是(2 * 1000)+(4 * 100)+(3 * 10)+(2 * 1)= 2432 该算法从2432的第一个位置(2)开始

答案 5 :(得分:0)

我知道这种迟到的反应,但你可以尝试这样的事情: -

    private static int stringToInt(String string) {
    if (string.length() == 0) {
        return 0;
    }
    int rv;
    int num = string.charAt(string.length() - 1) - '0';
    String restOfTheString = string.substring(0, string.length() - 1);
    rv = stringToInt(restOfTheString) * 10 + num;
    return rv;
}

答案 6 :(得分:0)

尝试这样的事情:

从您的字符中减去“ 0”字符的ASCII码将返回一个整数:

public class StringRecursion {
    static int counter = 0;

    public static void main(String[] args) {
        System.out.println(convertStringToInt("123456"));
    }

    public static int convertStringToInt(String input) {
        if (input.length() == 1)
            return input.charAt(0) - '0';

        int value = convertStringToInt(input.substring(0, input.length() - 1));
        counter++;
        return value * 10 + input.charAt(counter) - '0';

    }
}

答案 7 :(得分:-1)

试试这样:

sql = "SELECT DISTINCT id_prodotto, titolo, trinciatura_arbusti, taglio_erba, bioenergia, frutteti_vigneti, superfici_pendenza, residui_colturali, terreni_bagnati, terreni_sabbiosi, terreni_salicei, terreni_sassosi, telaio_fisso, telaio_spostatile, telaio_reversibile, potenza_min, potenza_max, larghezza_lavoro_cm, ordine, categoria, img1, nome, terreni_normali  FROM vista_ricerca WHERE "&QueryAdd&" ORDER BY ordine ASC"