2014-02-27 67 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 
    }