2014-02-27 68 views
1

該程序的目標是從文件中獲取輸入並剝離每個數字並將其轉換爲文本。我們不能使用字符串操作。 例如 1:一個 21:二一 150:一五零向後打印並在同一行上

但礦山看起來像這樣1:一個21:一是一二150:一個一個兩個零五一

嗯,我圖出了很多,但礦井全部打印在同一行和向後你能指導我在正確的道路

謝謝

public class Main { 

/** 
* @param args the command line arguments 
* @throws java.io.FileNotFoundException 
*/ 
public static void main(String[] args) throws FileNotFoundException { 
    Scanner scanner = new Scanner(new File("translate.txt")); 
    while(scanner.hasNextInt()){ 
     int number = scanner.nextInt(); 
     System.out.println(number + ": " +NumberTanslatorTrial.tanslate(number)); 
    // System.out.println(number + ": " + NumberTranslator.translate(number)); 

    } 


} 

新類

public class NumberTanslatorTrial { 

final private static String[] txt = {"zero", "one", "two", "three", "four", 
    "five", "six", "seven", "eight", "nine"}; 
static int tempNumber; 
static String finalString; 
static int tempNumber1; 
public static StringBuilder num = new StringBuilder(); 

public static String tanslate(int number) { 
    while (number > 9) { 
     tempNumber = number % 10; 
     number = number/10; 
     num.append(txt[tempNumber]); 
     num.append(" "); 
     finalString = num.toString(); 
    } 
    if (number <= 9) { 
     num.append(txt[number]); 
     num.append(" "); 
     finalString = num.toString(); 
    } 
    return finalString; 

} 

}

+0

好吧,等NUM添加num.append( 「\ n」)<= 9,它給每個輸出新行,但仍然是錯誤的。 – alwill

+0

而不是數學,你可以轉換爲一個字符串,並分析每個字符... – aliteralmind

+0

@aliteralmind我們不能做字符串操作 – alwill

回答

1

用做10%,然後問題/ 10是,它看起來在最少顯著位在先。

例如,用於輸入= 167,則有下列步驟:

  1. 位= 167%10 = 7
  2. 輸入=一十分之一百六十七= 16
  3. 位數= 16%10 = 6
  4. 輸入=一十分之一十六= 1
  5. 位= 1%10 = 1
  6. 輸入= 1/10 = 0

所以你看,你最終得到7個第一,6,第二和第三個。

解決此問題的最簡單方法是使用堆棧。

if (number == 0) { 
    return "Zero"; 
} // special case 
if (number < 0) { // Handle negatives. 
    num.append("Negative"); 
    number = -number; 
} 
List<Integer> stack = new ArrayList<Integer>(); 
while (number != 0) { 
    stack.add(number % 10); 
    number /= 10; 
} 
while (!stack.isEmpty()) { 
    int digit = stack.remove(stack.size() - 1); // Pop off the stack. 
    if (num.length() != 0) { // Add space if necessary. 
     num.append(' '); 
    } 
    num.append(txt[digit]); 
} 
return num.toString(); 
+0

你的也是這樣做1:一個2:兩個41:四個一個兩個 – alwill

+0

啊,您需要清除呼叫之間的「數字」。它實際上應該是translate()中的局部變量而不是靜態變量。 – Daniel

+0

我看到,一旦我寫了評論,它必須被清除,所以需要在方法中聲明謝謝! – alwill

0

你可以嘗試以下方法:

public static String tanslate(int number) { 
     StringBuilder num = new StringBuilder(); // if global var should be reinialized with every call to remove old data 
     while (number > 0) { 
      int tempNumber = number % 10; // no need to define the global var 
      number = number/10; 
      num.insert(0, " "); //insert at index 0, replace with "\n" for new line 
      num.insert(0, txt[tempNumber]); //insert at index 0 
     } 
     return num.toString(); // no need to define the global var finalString 
    }