-1

我有一个小型 java 程序,它收集用户编写的 10 个单词并按指定顺序打印它们。就目前而言,该程序有效,但没有凝聚力。

我的问题源于对内聚概念的了解不足以解决这个问题,以及对 Java/OO 语言不熟悉。

我认为 Entry 类太杂乱了,另一个类应该承担这个类的一些功能。

任何暗示或线索,神秘或其他,将不胜感激!

Dialogue.java 中缺少输入阅读器是有意的,因为原始代码使用专有代码。

这些是三个类:入口、对话和打印机。

入口.java

public class Entry {

    public static void main(String[] args){
        String[] wordArray = new String[10];
        Dialogue d = new Dialogue(); 
        wordArray = d.read(wordArray); 
        Printer p = new Printer(); 
        p.printForwards(wordArray); 
        p.printBackwards(wordArray); 
        p.printEveryOther(wordArray); 

    }

}

对话.java

public class Dialogue {

    public String[] read(String[] s){ 
            String[] temp; 
            temp = new String[s.length]; 

            for(int i=0;i<s.length;i++){
                String str = anything that reads input("Enter word number" + " " + (i+1));
            temp[i] = str;     
            } 

        return temp; 
    }

}

打印机.java

public class Printer {

    public void printForwards(String[] s){
        System.out.println("Forwards:");
        for(int i=0;i<s.length;i++){
            System.out.print(s[i] + " ");

            if(i==s.length-1){
                System.out.println("");
            }
        }
    }

    public void printBackwards(String[] s){
        System.out.println("Backwards:");
        for(int i=s.length-1;i>=0;i--){
            System.out.print(s[i]+ " ");

            if(i==0){
                System.out.println("");
            }
        }
    }

    public void printEveryOther(String[] s){
        System.out.println("Every other:");
        for(int i = 0; i < s.length; i++){
            if(i % 2 == 0){
                System.out.print(s[i] + " ");
            }

        }

    }
}// /class
4

1 回答 1

1

总体上看起来不错,事实上这是一项非常简单的任务,而 OOP 更适合更复杂的程序。话虽如此,这里有一些指针/示例。

您还可以进行更多 OOP 样式的打印。这样做的目的是构建可重用的模块化代码。我们通过将 String 数组操作(以前存在于 Printer 类中)抽象到它自己的类中来做到这一点。

这也非常相似/也称为松散耦合。我们通过拆分字符串处理功能和打印功能来实现松耦合。

将您的 Printer 类更改为 StringOrderer 或类似的东西:

public class StringOrderer {
    private String[] array;

    public class StringOrderer(String[] array) {
         this.array = array;
    }

    public String[] getArray() {
        return array;
    }

    public String[] everyOther(){
        String[] eos = new String[array.length];
        for(int i = 0; i < s.length; i++){
            if(i % 2 == 0){
                eos[eos.length] = s[i];
        }
        return eos;

    }

    public String[] backwards() {
    ...

然后在你的主类中添加一个这样的方法:

private static void printStringArray(String[] array) {
     for (int i=0; i<array.length; i++) {
         System.out.print(array[i]);
     }
}

然后在你的 main 方法中调用它:

StringOrderer s = new StringOrderer(wordArray);
System.out.println('Forward:');
printStringArray(s.getArray());
System.out.println('Every other:');
printStringArray(s.everyOther());
System.out.println('Backwards:');
... 

额外提示 - 您还可以在主类中添加方法,如下所示:

public class Entry {

    public static void main(String[] args){
        String[] wordArray = readWordArray()
        Printer p = new Printer(); 
        p.printForwards(wordArray); 
        p.printBackwards(wordArray); 
        p.printEveryOther(wordArray); 

    }


    private static String[] readWordArray() {
        Dialogue d = new Dialogue(); 
        return d.read(new String[10]); 
   }
}

使其更具可读性。

于 2015-10-22T23:30:51.817 回答