我想使用递归将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));
}
}
}
答案 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)
要开始的一些注意事项:
代码可以更加简单,例如:
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"