我正在尝试创建一个Java程序,它读取从键盘输入的数字字符串
并给出最长的上升子串。
以下是我的代码:
import java.util.Scanner;
public class Ascending{
public static void main(String args[]){
Scanner in = new Scanner(System.in);
System.out.print("Enter a number = ");
String n = in.nextLine();
int length = n.length();
for(int i = 0; i < length; i++) {
char first = n.charAt(i);
char next = n.charAt(i+1);
char last = n.charAt(length-1);
int f = (int)(first - 48);
int nx = (int)(next - 48);
int l = (int)(last - 48);
if (f<nx) {
String asc = n.substring(i, i++);
i++;
System.out.println("output = " + asc);
}
else {
String asc = n.substring(i, i++);
System.out.println("output = " + asc);
break;}
}
}
}
当我编译上面的内容时,我得到了
<Enter a number = 12 output = >
没有任何结果。
我假设for循环中出现了问题,但我无法弄清楚到底出错了。
我担心我可能定义了太多不必要的变量?
答案 0 :(得分:0)
您正在使用后增量运算符,但我认为您没有尝试过查看它是如何工作的。试试这个:
int i = 0;
System.out.println(i);
System.out.println(i++);
System.out.println(i);
你会得到
0
0
1
这是因为后增量(++
)表示“增加此值,然后在增加值之前返回值”。
所以当你要求
时n.substring(i, i++);
您明确要求使用0长度的字符串(因为i == i++
)。
您可以使用预增量运算符++i
,但它很少在代码高尔夫之外使用,因此您最终会让人感到困惑。最佳实践IMO只是在自己的行上使用++
,并避免查看返回值。
真的,你想要的是
n.substring(i, i+1);