2015-10-22 14 views
-1

У меня есть небольшая программа java, которая собирает 10 слов, написанных пользователем, и печатает их в указанных порядке. В ее нынешнем виде программа работает, но она не является сплоченной.Увеличенная сплоченность в простой java-программе

Проблема заключается в том, что я не знаю достаточно о концепции сплоченности, чтобы работать над ее исправлением, а также быть новым для языков Java/OO.

Я считаю, что класс Entry слишком путается, а другой класс должен использовать некоторые из функций этого класса.

Любые подсказки или подсказки, загадочные или другие были бы высоко оценены!

Отсутствие считывателя ввода в Dialogue.java является преднамеренным, так как исходный код использует проприетарный код.

Это три класса: запись, диалог и принтер.

Entry.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); 

    } 

} 

Dialogue.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; 
    } 

} 

Printer.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 
+2

Если ваша программа работает, и вы хотите ее просмотреть, перейдите к [CodeReview] (http://codereview.stackexchange.com) –

+0

@VinceEmigh Спасибо, я буду! – Kyrre

+0

Это меня смущает: «Я считаю, что класс Entry слишком путается, и другой класс должен взять на себя некоторые из функций этого класса». '- ваш класс Entry не является классом, который я бы волновался о, поскольку все это контейнер для вашего основного метода.В этом классе нет ничего ООП-иуи, и ваши усилия, вероятно, должны быть в другом месте. –

ответ

1

выглядит хорошо Ove rall, правда, это очень простая задача, поскольку OOP лучше подходит для более сложных программ. Это, как говорится, вот несколько указателей/примеров.

Вы также можете сделать свою печать более стилем ООП. Целью этого является создание многоразового, модульного кода. Мы делаем это путем абстрагирования манипуляций массива String (ранее существовавшего в классе 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]); 
    } 
} 

Затем вызовите его в основной метод:

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]); 
    } 
} 

чтобы сделать его более читаемым.