【问题标题】:Telephone Word generator java program电话字生成器java程序
【发布时间】:2014-02-17 14:36:27
【问题描述】:

我正在尝试编写一个将电话号码转换为不同单词组合的 java 程序。

许多人发现很难记住电话号码,因此他们使用 数字和字母之间的对应关系以发展七个字母 与他们的电话号码相对应的单词。例如,一个人 电话号码为 686-2377 的人可以使用通信 如图所示电话键盘数字和字母,以开发 七个字母的单词“数字”。每个七个字母的单词对应 正好是一个七位数的电话号码。每个七个字母的电话 number 对应于许多不同的七字母词,但大多数 这些词代表无法辨认的字母并列。写 一个程序,给定用户提供的七位数字,使用 一个 PrintStream 对象,每个可能的七个字母写入文件 该数字对应的单词组合。有 2,187 (3^7) 这样的组合。避免使用数字 0 和 1 的电话号码。

在程序中,我遇到了 main 方法的问题。是错了还是我放错了地方?

这是我的程序:

public class TelephoneNumberWordGenerator

{

    String phoneNumber;
    char numberLetters[][] = {
            {'0','0','0'},{'1','1','1'},{'A','B','C'},
            {'D','E','F'},{'G','H','I'},{'J','K','L'},
            {'M','N','O'},{'P','R','S'},
            {'T','U','V'},{'W','X','Y'}};


    Scanner input = new Scanner (System.in);
    private ObjectOutputStream output;
    PrintStream printStream;
    char[] word = new char [7];


    public static void main(String[] args){
    public void getPhoneNumber(){
            System.out.println("Enter a seven-digit telephone number: ");
            phoneNumber = input.next();

        }
    }

    public void openFile()
    {
        try // open file
        {
            output = new ObjectOutputStream(
                    new FileOutputStream ( "Phonenumber.txt") );

        }// end try
        catch ( IOException ioEcception )
        {
            System.err.println( "Error opening file.");
        } // end catch
    }// end method open file

    public void addFileInfo( )
    {
        try
        {
            char[] chars = phoneNumber.toCharArray ();
            int [] digit = new int [chars.length];
            for (int i = 0; i < chars.length; i++)
            {
                digit[i] = Integer.parseInt(String.valueOf(chars[i]));
            }

            printStream = new PrintStream(output);
            printStream.println("\n");


            for ( int level0 = 0; level0 < 3; level0 ++ )
            {
                word[0] = numberLetters[digit[0]][level0];

                for ( int level1 = 0; level1 < 3; level1 ++ )
                {
                    word[1] = numberLetters[digit[1]][level1];

                    for ( int level2 = 0; level2 < 3; level2 ++ )
                    {
                        word[2] = numberLetters[digit[2]][level2];

                        for ( int level3 = 0; level3 < 3; level3 ++ )
                        {
                            word[3] = numberLetters[digit[3]][level3];

                            for ( int level4 = 0; level4 < 3; level4 ++ )
                            {
                                word[4] = numberLetters[digit[4]][level4];

                                for ( int level5 = 0; level5 < 3; level5 ++ )
                                {
                                    word[5] = numberLetters[digit[5]][level5];

                                    for ( int level6 = 0; level6 < 3; level6 ++ )
                                    {
                                        word[6] = numberLetters[digit[6]][level6];
                                        printStream.print(word);
                                    }
                                }
                            }
                        }
                    }
                }
            }

            System.out.println("File written.");
            System.exit(1);

        }
        catch (Exception exception )
        {
            System.err.println( "Error writing to file.");
            System.exit(1);
        }
    }

    public void closeFile()
    {
        try // close file
        {
            if ( output != null )
                output.close();
        }// end try
        catch (IOException ioException )
        {
            System.err.println( "Error closing file.");
            System.exit(1);
        }// end catch


    }// end method closeFile
}

【问题讨论】:

  • 您的主要方法在另一个方法中,getPhoneNumber()。把它从那里弄出来。
  • 缩进你的代码,看起来很糟糕......
  • 是的。 main 方法是它自己的方法。你把它放在另一个方法中。你怎么没有得到编译器错误?
  • 附带说明,XKCD 已经做了一些非常接近whatif.xkcd.com/75
  • 现在您的getPhoneNumber() 方法在您的main 方法中。同样的问题。 在 Java 中,您不能在其他方法中包含方法。 永远。您可以从您的 main 调用 getPhoneNumber() 方法,但不能将其放入方法中本身。

标签: java


【解决方案1】:

您在 main 方法中定义了一个 getPhoneNumber() 方法,这在 java 中是不正确的。 在main方法外面定义,在main()里面调用

【讨论】:

    【解决方案2】:

    对于在 Javascript 中寻找解决方案的人,这里有一个递归解决方案。其他语言请转换代码

    const group = [];
    result = [];
    let numstr = "";
    var letterCombinations = function(num) {
      numstr = num.toString();
      const letters = [,,['a','b','c'],['d','e','f'],['g','h','i'],['j','k','l'],['m','n','o'],['p','q','r','s'],['t','u','v'],['w','x','y','z']];
      for (let i=0; i<numstr.length; i++) {
        group.push(letters[parseInt(numstr[i])]);
      }
      wordMaker(num, 0, "");
      return result;
    }
    
    const wordMaker = (num, n, w) => {
      for (let i=0; i<group[n].length; i++) {
        if (n === group.length-1) {
          result.push(w + group[n][i])
        }
        else {
          wordMaker(num, n+1, w + group[n][i]);
        }
      }
    }
    

    测试输入

    console.log(letterCombinations(23));
    

    输出

    [ 'ad', 'ae', 'af', 'bd', 'be', 'bf', 'cd', 'ce', 'cf' ]
    

    【讨论】:

      【解决方案3】:

      您的问题必须是另一个方法中的主要方法。在java中,你不能为其他方法中的方法编写代码。

      【讨论】:

        【解决方案4】:
        public static void main(String[] args){
        
                TelephoneNumberWordGenerator tt=new TelephoneNumberWordGenerator();
        
                        System.out.println("Enter a seven-digit telephone number: ");
                        phoneNumber = input.next();
                        tt.openFile();
                        tt.addFileInfo();
                        tt.closeFile();
        
                   }
        

        【讨论】:

          猜你喜欢
          • 2012-04-29
          • 2013-11-16
          • 2015-01-09
          • 2014-05-08
          • 1970-01-01
          • 2016-08-20
          • 2018-05-31
          • 2011-02-23
          • 1970-01-01
          相关资源
          最近更新 更多