2014-11-26 2 views
0

Я пишу эту программу, в которой пользователь вводит размеры для таблицы, затем создается таблица с этими размерами, а элементы внутри нее определяются из случайного генератора с целыми числами от 0 до 9. Затем мне нужно do создает цикл, который определит, есть ли в таблице четыре последовательных четных целых числа.Как проверить случайный двумерный массив для последовательных четных целых чисел?

2 5 8 7 1 
3 2 9 4 7 
5 1 2 0 3 
8 0 1 2 7 

В этой таблице два появляются последовательно, по диагонали от первого места. Это также может быть так:

9 5 3 7 0 
2 5 7 3 1 
8 5 0 2 9 
4 5 1 7 5 

В этой таблице пять отображаются вертикально вниз со второго места.

Вот что я сделал до сих пор:

public class FourConsecutiveNumbers { 

public static void main(String[] args) { 

    Scanner rowDimension = new Scanner(System.in); 
    System.out.print("Enter the number of rows: "); 
    int firstInput = rowDimension.nextInt(); 

    Scanner columnDimension = new Scanner(System.in); 
    System.out.print("Enter the number of columns: "); 
    int secondInput = columnDimension.nextInt(); 

    int[][] randomTable = new int[firstInput][secondInput]; 
    for (int row = 0; row < firstInput; row++) { 
     for (int column = 0; column < secondInput; column++) { 
      randomTable[row][column] = (int)(Math.random() * 10 + 0); 
      System.out.print(randomTable[row][column] + " "); 
     } 
     System.out.println(); 
    } 
} 

}

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

Я знаю, что это главная идея для этого было бы:

if there is x number that repeats consecutively four times in a row, then return true; else false 
if there is x number that repeats consecutively four times in a column, then return true; else false 
if there is x number that repeats consecutively four times in surrounding corner, then return true; else false. 

Теперь, это просто псевдо-код, чтобы вернуться к, но я серьезно зациклился на том, как я это сделаю, и буду благодарен за вклад от других.

+0

Есть ли определенная часть псевдо-код, который вам топтаться? – CBredlow

+0

@CBredlow нет, я знаю, что такое идея кода; как реализовать это то, что меня толкает. – NEPat10

+2

Если вам нужно было сделать это самостоятельно без компьютера, как бы вы это сделали? Начните с первой части (четыре раза подряд). Притворяйтесь, что вам нужно посмотреть через какой-то окуляр и посмотреть только одно число в массиве за раз (так, чтобы вы не просто «фиксировали» четыре числа, сидящие вместе). Вы должны придумать какой-то метод решения этого вопроса - что бы это было? Я думаю, как только вы это выясните, все, что вам нужно сделать, это перевести идею на код, который вы должны уметь делать. – ajb

ответ

0

Вы можете использовать цикл вложенных циклов для проверки каждого измерения, а затем, а затем поменять счетчики циклов, чтобы проверить обратное. Я не проверял, но я думаю, что это должно работать:

import java.util.*; 
public class FourConsecutiveNumbers { 
static boolean check_vertical(int[][] randomTable){ 
    for (int i =0; i<randomTable.length; i++){ 
     for(int t=0; t<randomTable[0].length-3;t++){ 
      if (randomTable[i][t]==randomTable[i][t+1] && randomTable[i][t+1]==randomTable[i][t+2] && randomTable[i][t+2]==randomTable[i][t+3]){ 
       return true; 
      } 
     } 

    } 
return false; 
} 
static boolean check_horizontal(int[][] randomTable){ 
    for (int i =0; i<randomTable.length; i++){ 
     for(int t=0; t<randomTable[0].length-3;t++){ 
      if (randomTable[t][i]==randomTable[t+1][i] && randomTable[t+1][i]==randomTable[t+2][i] && randomTable[t+2][i]==randomTable[t+3][i]){ 
       return true; 
      } 
     } 

    } 
return false; 
} 
static boolean check_diagonal(int[][] randomTable){ 
//check down  
    for (int t =0; t<randomTable.length-3; t++){ 
     for(int i=0; i<randomTable[0].length-3;i++){ 
      if (randomTable[i][t]==randomTable[i+1][t+1] && randomTable[i+1][t+1]==randomTable[i+2][t+2] && randomTable[i+2][t+2]==randomTable[i+3][t+3]){ 
       return true; 
      } 

     } 



    } 
//check up 
    for (int t =randomTable.length; t>2; t--){ 
    for(int i=0; i<randomTable[0].length-3;i++){ 
     if (randomTable[t][i]==randomTable[t-1][i+1] && randomTable[t-1][i+1]==randomTable[t-2][i+2] && randomTable[t-2][i+2]==randomTable[t-3][i+3]){ 
      return true; 
     } 

    } 
} 
return false; 
} 


public static void main(String[] args) { 

    Scanner rowDimension = new Scanner(System.in); 
    System.out.print("Enter the number of rows: "); 
    int firstInput = rowDimension.nextInt(); 

    Scanner columnDimension = new Scanner(System.in); 
    System.out.print("Enter the number of columns: "); 
    int secondInput = columnDimension.nextInt(); 

    int[][] randomTable = new int[firstInput][secondInput]; 
    for (int row = 0; row < firstInput; row++) { 
     for (int column = 0; column < secondInput; column++) { 
      randomTable[row][column] = (int)(Math.random() * 10 + 0); 
      System.out.print(randomTable[row][column] + " "); 
     } 
     System.out.println(); 
    } 
    if(check_horizontal(randomTable) || check_vertical(randomTable) || check_diagonal(randomTable)){ 
     System.out.println("There are 4 in a row, in some way"); 
    } 
    else{ 
     System.out.println("No luck"); 

    } 
}} 
+0

Я продолжаю получать ошибки StringIndexOutOfBounds в строках 44 и 72 – NEPat10

+0

А, да, я вижу свою ошибку. Переключатель -3 с -4, так как последний индекс массива - длина-1. Это должно сработать, но опять же, я его не тестировал. – mattegener

0

Вы можете попробовать выполнить итерации через элементы в таблице. Для каждого из них, если рядом с ним имеется соответствующий номер, начинается четыре последовательных четных целых числа. Оттуда вы просто должны следить за тем же направлением.

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