2013-03-17 113 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