2013-12-04 4 views
0

Я пропустил крайний срок для этого задания, но по-прежнему беспокоит меня, что я не понимаю, что я делаю для этого проекта. Его часть 2 из раствора проверки судоку, что необходимо четыре метода добавил к нему, которые являютсяПроблема с решением Java Solution Checker

public boolean checkAndPrintReport( ) {*/return true;} 

, которые должны проверить все и печатные линии для каждой неудачной строки или столбца. Остальные

public boolean isGoodRow( int yRowParam ) {return true;} 
public boolean isGoodColumn( int xColParam ) {return true;} 
public boolean isGoodBlock(int xBlockP, int yBlockP) {return true;} 

Наконец, метод мой checkAll() должен иметь три вложенных цикла, призывающих выше трех 9 раз каждый.

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

public int timesRowHas(int yParam, int number) { 
    int nTimesHas = 0; 
    for(int x = 0; x < 9; x++) 
     if(this.getCell(x, yParam) == number) 
      nTimesHas = nTimesHas + 1; 

    return(nTimesHas); 
} 

public int timesColHas(int xParam, int number) { 
    int nTimesHas = 0; 
    for(int y = 0; y < 9; y++) 
     if(this.getCell(xParam, y) == number) 
      nTimesHas = nTimesHas + 1; 

    return(nTimesHas); 
} 

public int timesBlockHas(int xBlockParam, int yBlockParam, int number) { 
    if(xBlockParam < 0 || xBlockParam > 2 || yBlockParam < 0 || yBlockParam > 2) 
     throw new IllegalArgumentException("Bad xBlockParam or bad yBlockParam or both.."); 

    int nTimesHas = 0; 
    for (int x=0; x<3; x++) 
     for (int y=0; y<3;y++) 
      nTimesHas = nTimesHas +getCell(xBlockParam+x, yBlockParam+y); 

    return(nTimesHas); 
} 
+0

Я думаю, что ОП просит, если функции он уже написанные достигают целей функций, которые его просят написать, и почему/почему нет? – bcorso

ответ

0

Функция, написавшая является не именно то, что вам нужна. Ваши функции проверяют, сколько раз один номер находится в строке (столбец или поле).

Чтобы узнать, хороша ли строка (столбец или поле), вам действительно нужно проверить все числа (1-9), а не только одну из них.

Однако хорошая новость: вы можете реализовать необходимые функции, используя свои функции:

public boolean isGoodRow(int yRowParam){ 
    // for number = 1,..,9, ensure the count is not > 1 
    for(int i=1; i<=9; i++) 
     if(timesRowHas(yRowParam, i) > 1) 
      return false; 
    return true; 
} 

(В случае, если вы заинтересованы): Это не является наиболее эффективным решением, оно работает в O (n) время. isGoodRow() можно найти в O (n) раз, гистограммируя # в строке.


После того, как вы выполнили необходимые функции:

public boolean isGoodRow(int yRowParam) 
public boolean isGoodColumn(int xColParam) 
public boolean isGoodBlock(int xBlockP, int yBlockP) 

Тогда вам просто необходимо использовать их для реализации checkAndPrintReport():

public boolean checkAndPrintReport(){ 
    for(int i=0; i<9; i++) 
     if(!isGoodRow(i) || !isGoodColumn(i) || !isGoodBlock(i/3, i%3) 
      return false; 
    return true; 
} 
+0

Я не понимаю, что я, судя по всему, предложил предложенные функции, похоже, они спрашивают, что я уже делал выше. – user3060040

+0

Хорошо, как вы объясните, теперь имеет больше смысла. Работает ли функция «Блок»? И проверяется ли проверка на то, чтобы быть в другом .java, чтобы вызвать другие методы? – user3060040

+0

Он будет работать с вашей функцией Block, как только вы ее исправите. getCell (xBlockParam + x, yBlockParam + y) должен быть getCell (3 * xBlockParam + x, 3 * yBlockParam + y) – bcorso

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

  • Нет связанных вопросов^_^