0

为我的第一次 Java 考试做准备,并且在方法上有一定的问题。以下问题只是将组合成单个 Java 文件的四种方法中的一种。

问题:

编写代码以创建一个名为“exam1.txt”的新文件,并将以下文本打印到文件中:

一号
线二号
线三号线

这是我到目前为止所拥有的:

import java.io.FileNotFoundException;
import java.io.PrintWriter;

public class problem2 {

    public static void main(String[] args) throws FileNotFoundException {
        String exam1 = "Exam1.txt";
        
        PrintWriter printWriter = new PrintWriter(exam1);
        for(int n = 0; n < 4; n++){
            printWriter.printf("Line %d\n", n);
        }
        printWriter.close();

    }

}

我坚持的是弄清楚如何将数字转换为实际单词;例如,“1”变成“One”。对于这个问题,我选择的 for 循环是否正确?我知道如何通过打印出每一行来做到这一点,但我想我会学习正确的方法。

4

2 回答 2

0

我坚持的是弄清楚如何将数字转换为实际单词。

这是将数字转换为单词的代码。这将帮助你

import java.util.Scanner;

class NumberToString
{

    public enum hundreds {OneHundred, TwoHundred, ThreeHundred, FourHundred, FiveHundred, SixHundred, SevenHundred, EightHundred, NineHundred}
    public enum tens {Twenty, Thirty, Forty, Fifty, Sixty, Seventy, Eighty, Ninety}
    public enum ones {One, Two, Three, Four, Five, Six, Seven, Eight, Nine}
    public enum denom {Thousand, Lakhs, Crores}
    public enum splNums { Ten, Eleven, Twelve, Thirteen, Fourteen, Fifteen, Sixteen, Seventeen, Eighteen, Nineteen}
    public static String text = "";

    public static void main(String[] args) 
    {
        System.out.println("Enter Number to convert into words");
        Scanner sc = new Scanner(System.in);
        long num = sc.nextInt();
        int rem = 0;
        int i = 0;
        while(num > 0)
        {
            if(i == 0){
                rem = (int) (num % 1000);
                printText(rem);
                num = num / 1000;
                i++;
            }
            else if(num > 0)
            {
                rem = (int) (num % 100);
                if(rem > 0)
                    text = denom.values()[i - 1]+ " " + text;
                printText(rem);
                num = num / 100;
                i++;
            }
        }
        if(i > 0)
            System.out.println(text);
        else
            System.out.println("Zero");
    }

    public static void printText(int num)
    {
        if(!(num > 9 && num < 19))
        {
            if(num % 10 > 0)
                getOnes(num % 10);

            num = num / 10;
            if(num % 10 > 0)
                getTens(num % 10);

            num = num / 10;
            if(num > 0)
                getHundreds(num);
        }
        else
        {
            getSplNums(num % 10);
        }
    }

    public static void getSplNums(int num)
    {
        text = splNums.values()[num]+ " " + text;
    }

    public static void getHundreds(int num)
    {
        text = hundreds.values()[num - 1]+ " " + text;
    }

    public static void getTens(int num)
    {
        text = tens.values()[num - 2]+ " " + text;
    }

    public static void getOnes(int num)
    {
        text = ones.values()[num - 1]+ " " + text;
    }
}
于 2013-09-28T02:42:46.827 回答
0

没有“正确”的方法可以做到这一点,但我建议您在这里分离关注点,因为当您进入高阶方法时,这通常是一种很好的做法。您在这里尝试做两件事:将 int 转换为 String,然后将生成的 String(s) 格式化为写入文件的一系列行。将这些功能中的每一个都放入单独的方法中:一个将 int 转换为它们的 String 表示形式(但是您最终会实现它),另一个负责完成所有文件写入工作并在此过程中调用 int-conversion 方法。

我不同意@arshajii 的说法,即也许你应该只写三个 println() 语句,这会重复功能( printf() 语句的格式会重复),同时混合关注点。我可能会在我在现实世界中编写的一些代码中这样做(取决于情况),但这不是我在编程课程介绍中进行考试的方式,也不是我建议的一般心态学生只是学习良好的发展实践。

至于我知道您要问的实际问题(如何将整数转换为相应的字符串值),因为您有一组简短、定义明确的值,您可以使用switch 语句...

于 2013-09-28T02:44:05.460 回答