0

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

恐怕我定义了太多不必要的变量?

4

1 回答 1

0

您正在使用后增量运算符,但我认为您还没有尝试过它是如何工作的。尝试这个:

int i = 0;

System.out.println(i);
System.out.println(i++);
System.out.println(i);

你会得到

0
0
1

那是因为 post-increment ( ++) 说“增加这个值,然后返回你增加它之前的值”。

所以当你要求

n.substring(i, i++);

您明确要求一个长度为 0 的字符串(因为i == i++)。

您可以使用预增量运算符,,++i但它很少在代码高尔夫之外使用,因此您最终只会让人们感到困惑。最佳实践 IMO 是只++在自己的线路上使用,避免查看返回值。

真的,你想要的是

n.substring(i, i+1);
于 2013-03-17T04:42:34.610 回答