Java:最长的升序子串

时间:2013-03-17 04:25:36

标签: java for-loop compiler-errors substring

我正在尝试创建一个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循环中出现了问题,但我无法弄清楚到底出错了。

我担心我可能定义了太多不必要的变量?

1 个答案:

答案 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);