2014-11-21 75 views
0

我在這裏寫了一個代碼來執行以下操作: 提示用戶輸入多少個數字。我們稱這個值爲userRequest。 那麼,userRequest次我們做下面的事情: 讀一個字符串。這個字符串的形式是:數字和字母的混合。 返回字符串的整數和分隔的字母。如何在循環內創建一個數組,然後能夠在Java中的循環之後調用它?

但在返回代碼中,我逐個字符地掃描了字符串,因此它分別打印每個輸入。但是,我的問題是,如何將字母一起打印成一個整數和字母。 (我覺得需要數組,但我無法調用數組時,它在一個循環內)

import java.util.*; 
 
public class Program8{ 
 
    public static void main(String[] args){ 
 
    Scanner scan = new Scanner (System.in); 
 
    int userRequest; 
 
    int returnNum; 
 

 
    System.out.print("How many numbers do you wish to enter? "); 
 
     while (!scan.hasNextInt()){ 
 
     System.err.print("Please try again, with digits only: "); 
 
     scan.next(); 
 
     }//while 
 
     userRequest = scan.nextInt(); 
 
     
 
     int sortingNum = 1; 
 
     String str; 
 
     char ch; 
 
     str = scan.nextLine(); 
 
     for (int i = 0; i < userRequest; i++){ 
 
     System.out.print("* Please enter a string #" + sortingNum + ": "); 
 
     str = scan.nextLine(); 
 
     System.out.println("- String #" + sortingNum++ + " = " + str); 
 
     for (int j = 0; j < str.length(); j++){ 
 
      ch = str.charAt(j); 
 
      if ((ch + 0) >= 48 && (ch + 0) <= 57){ 
 
      int digit = ((ch + 0) - 48); 
 
      System.out.println(digit); 
 
      } 
 
     } 
 
     System.out.println(); 
 
     for (int k = 0; k < str.length(); k++){ 
 
      if (str.toLowerCase().charAt(k) >= 'a' && str.toLowerCase().charAt(k) <= 'z') 
 
      System.out.println(str.charAt(k)); 
 
     }  
 
     }//for 
 
    
 
    }//main 
 
}//Program8

+0

快速的解決方案,你可以嘗試使用'print',而不是'println' – 2014-11-21 05:33:50

+0

你可以調用一個循環中的數組,就不要嘗試宣告它裏面的loop:P儘管這裏不需要數組。 Eran下面的答案很有幫助。 – 2014-11-21 05:39:37

+0

我知道,但這會限制我使用後者的能力。例如,如果我想總結所有整數,這將是一個問題。 – Bader 2014-11-21 05:40:36

回答

1

對於數:
由10添加邏輯乘以一個變量,並添加提取的數字。

對於字符串:
添加將字符追加到stringbuilder對象的邏輯。

代碼:

int finalNumber = 0; 
    for (int j = 0; j < str.length(); j++){ 
     ch = str.charAt(j); 
     if ((ch + 0) >= 48 && (ch + 0) <= 57){ 
     int digit = ((ch + 0) - 48); 
     finalNumber = finalNumber*10 + digit; 
     //System.out.println(digit); 
     } 
    } 
    System.out.println(finalNumber); 
    System.out.println(); 
    StringBuilder finalString = new StringBuilder(); 
    for (int k = 0; k < str.length(); k++){ 
     if (str.toLowerCase().charAt(k) >= 'a' && str.toLowerCase().charAt(k) <= 'z') { 
     //System.out.println(str.charAt(k)); 
     finalString.append(str.charAt(k)); 
     } 
    } 
    System.out.println(finalString.toString()); 
+0

我只有一個問題。爲什麼如果我們沒有初始化變量finalNumber爲0,我們會得到一個錯誤? – Bader 2014-11-21 06:17:00

0

您可以使用StringBuilder來串聯carachters並在最後打印出來:

StringBuilder digits = new StringBuilder(); 
    StringBuilder letters = new StringBuilder(); 
    for (int j = 0; j < str.length(); j++){ 
     ch = str.charAt(j); 
     if ((ch + 0) >= 48 && (ch + 0) <= 57){ 
     int digit = ((ch + 0) - 48); 
     digits.append(digit); 
     } 
    } 
    for (int k = 0; k < str.length(); k++){ 
     if (str.toLowerCase().charAt(k) >= 'a' && str.toLowerCase().charAt(k) <= 'z') 
     letters.append(str.charAt(k)); 
    }  
    System.out.println(digits.toString()); 
    System.out.println(letters.toString()); 
+0

你可以請看看我的問題在這裏:http://stackoverflow.com/questions/27181778/java-lang-arrayindexoutofboundsexception-50-handling-big-integers-on-java /////我做的程序是9的補充來處理java中的加法和減法,但是它有一些問題! – Bader 2014-11-29 00:22:39

相關問題