2013-11-14 3 views
0

Я сделал таблицу 12 на 12, которая работает в одной и той же программе, но я бы хотел сделать это OO, чтобы я мог поместить «public static void main» в другой «тестовый файл» "и он будет по-прежнему работать properly..i'm возникли некоторые проблемы с ОО подхода и я действительно нужна помощь ... Это то, что мой код выглядит следующим образом:Сделать проект более OO Java

import java.util.Scanner; 
import java.util.Arrays; 
import java.util.Random; 

public class PlayingArea { 
    public static void main(String[] args) { 
     Random r = new Random(); 
     Scanner input = new Scanner(System.in); 
     System.out.println("How many regions would you like (2- 4)"); 
     int region = input.nextInt(); 
     String letters = ""; 
     while(letters.length() < 2) { 
      if (region == 4) { 
       letters= "EFGH"; 
      } 
      if (region == 3) { 
       letters= "EFG"; 
      } else if (region == 2) { 
       letters= "EF"; 
      } else if (region < 2) { 
       System.out.println("You inputed a wrong value, try again..."); 
      } 
     } 
     int N = letters.length(); 
     char [][] letter = new char[12][12]; 

     for (int j = 0; j < letter.length; j++) { 

      for(int i=0; i < letter.length; i++) { 
       letter[i][j] = letters.charAt(r.nextInt(N)) ; 
      } 
     } 

     for (char[] letterRow : letter) 
      System.out.println(Arrays.toString(letterRow)); 
    } 
} 
+0

Если я понимаю вопрос, вы ищете класс тестирования, который имеет 'static void main', который затем создает экземпляр' PlayingArea'? Это домашнее задание? – Dan

+0

Я пытаюсь сделать игру :) Да, это именно то, что я хочу: D – Tommon

+0

Прохладный, похоже, есть несколько хороших ответов ниже. С вопросами вокруг контекста такой игры может быть полезно кратко упомянуть, что это (или нет) домашнее задание. Однако люди будут помогать в любом случае! – Dan

ответ

2

если вы относительно новый к java, тогда вы делаете все хорошо. Имейте в виду, что в вашей программе есть бесконечный цикл (фиксированный ниже), если вы вводите число за пределами 2-4.

Во-первых, вашему классу PlayingArea нужны некоторые переменные-члены для представления состояния.

Первый - это String letters (EF или EFG или EFGH), который инициализируется через конструктор в коде ниже.

Второй из них - char[][] grid (в вашем коде переименован в letter), которому присваивается значение в методе populate(), который помещает буквы в сетку.

Другой способ, gridAsString() делает как раз это.

public static void main можно легко переместить в другой класс, если хотите.

Удачи.

public class PlayingArea { 
    private String letters; 
    private char[][] grid; 

    public PlayingArea(String letters) { 
     this.letters = letters; 
    } 

    public void populate() { 
     int n = letters.length(); 
     grid = new char[12][12]; 

     Random r = new Random(); 
     for (int j = 0; j < grid.length; j++) { 
      for (int i = 0; i < grid.length; i++) { 
       grid[i][j] = letters.charAt(r.nextInt(n)); 
      } 
     } 

    } 

    public String gridAsString() { 
     StringBuilder sb = new StringBuilder(); 
     for (char[] letterRow : grid) { 
      sb.append(Arrays.toString(letterRow)).append('\n'); 
     } 
     return sb.toString(); 
    } 

    public static void main(String[] args) { 
     Scanner input = new Scanner(System.in); 
     System.out.println("How many regions would you like (2- 4)"); 
     String letters = ""; 
     while (letters.length() < 2) { 
      int region = input.nextInt(); 
      if (region == 4) { 
       letters = "EFGH"; 
      } else if (region == 3) { 
       letters = "EFG"; 
      } else if (region == 2) { 
       letters = "EF"; 
      } else { 
       System.out.println("You inputed a wrong value, try again..."); 
      } 
     } 
     PlayingArea playingArea = new PlayingArea(letters); 
     playingArea.populate(); 
     System.out.println(playingArea.gridAsString()); 
    } 
} 
+0

эй спасибо за ответ: D если это не слишком сложно для вас, вы можете объяснить часть «private String gridAsString()» ?? – Tommon

+1

Привет, Tommon, не беспокойтесь, методы 'populate' и' gridAsString' должны быть фактически 'public'. Последняя функция генерирует String по нескольким строкам, которые вы можете распечатать на sout. «StringBuilder» является распространенным способом создания большой строки, хотя вы могли бы также использовать простой «String result =» ";", а затем в result for result = = Arrays.toString (letterRow)) + ' \ n '; ', чтобы затем вернуть результат;'. Одной из важных концепций OO является инкапсуляция, а класс 'PlayingArea' скрывает внутреннее представление данных и предоставляет публичные функции, такие как' gridAsString' для внешнего мира. – vikingsteve

+0

Спасибо :), но теперь, если это строка, я не смогу изменить все символы «E» (например) на другого персонажа, я ...? – Tommon

Смежные вопросы