输出问题Java

时间:2011-09-26 21:13:33

标签: java

好的,我终于解决了这个问题,但我还有一个问题,当我在被问到时输入字符串,如果我在程序运行时输入的数字中放入任何空格,则将这些空格转换为数字9在我的输出中,如果我不使用空格一切运行良好,任何想法如何我可以阻止9被添加到我的空间?提前谢谢。

package chapter_9;

import java.util.Scanner;


public class Nine_Seven {


    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        System.out.print("Enter a string: ");
        String string = input.nextLine();
        string = string.toUpperCase();

        for (int i = 0;i<string.length();i++){
            if(Character.isDigit(string.charAt(i)))
                System.out.print(string.charAt(i));
            else
                System.out.print(getNumber(string.charAt(i)));
            }
       }


     public static int getNumber(char uppercaseLetter){

        if (uppercaseLetter == 'A' || uppercaseLetter == 'B' || uppercaseLetter == 'C') 
            return 2; 
        else if (uppercaseLetter == 'D' || uppercaseLetter == 'E' || uppercaseLetter == 'F')
            return 3;
        else if (uppercaseLetter == 'G' || uppercaseLetter == 'H' || uppercaseLetter == 'I')
            return 4;
        else if (uppercaseLetter == 'J' || uppercaseLetter == 'K' || uppercaseLetter == 'L') 
            return 5;
        else if (uppercaseLetter == 'M' || uppercaseLetter == 'N' || uppercaseLetter == 'O') 
            return 6; 
        else if (uppercaseLetter == 'P' || uppercaseLetter == 'Q' || uppercaseLetter == 'R' || uppercaseLetter == 'S')
            return 7; 
        else if (uppercaseLetter == 'T' || uppercaseLetter == 'U' || uppercaseLetter == 'V')
            return 8;
        else
            return 9; 
    } 


}

输出示例: 输入字符串:597 6630

597 * 9 * 6630

3 个答案:

答案 0 :(得分:4)

看看getNumber()的作用 - 如果它与您指定的任何情况都不匹配,则返回9.

选项:

  • 更改它以明确为空格返回不同的数字
  • 如果值为'',则将主叫代码更改为调用 getNumber()

我还建议重构一下调用代码只调用charAt(i)一次,只是为了整洁。例如,您可能需要:

for (int i = 0; i < string.length(); i++){
    char c = string.charAt(i);

    if (Character.isDigit(c) || c == ' ') {
        System.out.print(c);
    } else {
        System.out.print(getNumber(c));
    }
}

如评论中所述,getNumber()也可以使用简单的开关/案例编写:

public static int getNumber(char uppercaseLetter) {
    switch (upperCaseLetter) {
        case 'A': case 'B': case 'C':
            return 2;
        case 'D': case 'E': case 'F':
            return 3;
        case 'G': case 'H': case 'I':
            return 4;
        case 'J': case 'K': case 'L':
            return 5;
        case 'M': case 'N': case 'O':
            return 6;
        case 'P': case 'Q': case 'R': case 'S'
            return 7;
        case 'T': case 'U': case 'V':
            return 8;
        default:
            return 9;
    }
}

(显然你可以根据需要垂直堆叠案例......)

答案 1 :(得分:1)

elsereturn 9;之间添加if语句,仅为W,X,Y,Z输出9并附加else return "";

答案 2 :(得分:0)

稍微偏离主题但仍然很重要:像这样的大转换语句通常是一种暗示您缺少某种对象抽象的建议。我喜欢这种情况下的枚举,所以我将这个逻辑封装在一个枚举中,也许就像这样:

public enum PhoneDigit {
    Zero(""), One(""), Two("ABC"), Three("DEF"), Four("GHI"), 
    Five("JKL"), Six("MNO"), Seven("PQRS"), Eight("TUV"), Nine("");

    private final String letters;

    private PhoneDigit(String letters) {
        this.letters = letters;
    }

    public boolean hasLetter(char character) {
        return letters.contains(String.valueOf(character));
    }

    public PhoneDigit valueOf(char character) {
        for (PhoneDigit digit : values()) {
            if (digit.hasLetter(character)) {
                return digit;
            }
        }

        return null;
    }
}

这段代码非常容易测试,它可以在系统的其他部分重复使用,等等。虽然我的“valueOf”方法不如switch语句那么高效,但是如果它变得很重要,你可以在以后轻松地改进它。这是非常不可能的。

现在,您可以向此对象添加/测试其他方法,如getPhoneNumberFromString(String)boolean isPhoneDigit(char)等,这些方法不仅非常便于测试,而且存储所有这些方法在逻辑上也是合理的在这个位置。您的代码将更易于阅读,太阳将更加明亮,这将是您购买SlapChop时所做的最好的事情。

最后,请注意您免费获取有用的方法,例如values()ordinal()等。

祝你好运!