2013-03-17 69 views
0

我想创建一个Java程序,读取从键盘输入一个数字串,的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

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

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,但它很少在代码高尔夫之外使用,所以最终只会让人感到困惑。国际海事组织的最佳做法是仅在自己的路线上使用++,并避免查看返回值。

真的,你想要的这里是

n.substring(i, i+1); 
+0

如果我这样做,我会得到正确的结果,但也就是只有在输入小于2个位数。例如,如果我写了'41234',那么我再也没有得到任何输出。我想我必须得到增量的子串才能得到完整的'1234'。 (i ++,++ i,i + 1)似乎没有出于某种原因正在工作。 – 2013-03-17 04:52:12

+0

@BettyJones因为您在'其他'条件下有'break'。我觉得你是通过把代码块放在一起而不理解为什么编码的。我建议采取相反的方法:对于你写的每一条陈述,你都应该问自己:“为什么我需要*在这里有这样的陈述?如果我把它放开,会出现什么问题?”如果你有'i ++'之类的东西想要使用它,但不理解它,请编写一个单独的测试程序来确定它是如何工作的。 – 2013-03-17 11:19:26

+0

好的,将尝试再次开始工作。谢谢! – 2013-03-17 19:47:29