2014-01-20 4 views
0

Попытка выяснить, как выполнить вычисление общего значения символов ASCII в строке 2D-массива. Из того, что я понимаю, я должен создать цикл for для цикла через каждый экземпляр внутри массива, но я не уверен, как это сделать. Другим решением, которое мне было дано, было использование HashSet, но я опасаюсь использовать его, потому что у меня нет опыта с ними. Испытательный эксперимент, который я пробовал, проходил через каждый символ массива и, конечно же, добавлял их все, не очень эффективно.Определить значение ASCII строки/столбца в двумерном массиве символов

import java.util.Scanner; 

class SmartPuzzleProgram{ 
    public static void main(String[] args){ 
    char[][] table = new char[5][5]; 
    table[0][0] = 'S'; 
    table[0][1] = 'M'; 
    table[0][2] = 'A'; 
    table[0][3] = 'R'; 
    table[0][4] = 'T'; 
    table[1][1] = 'T'; 
    table[1][2] = 'S'; 
    table[1][3] = 'M'; 
    table[2][2] = 'R'; 
    table[2][4] = 'S'; 
    table[3][1] = 'S'; 
    table[3][2] = 'M'; 
    table[4][2] = 'T'; 
    table[4][3] = 'S'; 

    int rows = 5; 
    int columns = 5;  

    for(int k = 0; k>=0; k++){ 

     System.out.println(" | 1 | 2 | 3 | 4 | 5 |"); 
     System.out.println("---+---+---+---+---+---+"); 
     System.out.println(" 1 | "+table[0][0]+" | "+table[0][1]+" | "+table[0][2]+" | "+table[0][3]+" | "+table[0][4]+" |"); 
     System.out.println("---+---+---+---+---+---+"); 
     System.out.println(" 2 | "+table[1][0]+" | "+table[1][1]+" | "+table[1][2]+" | "+table[1][3]+" | "+table[1][4]+" |"); 
     System.out.println("---+---+---+---+---+---+"); 
     System.out.println(" 3 | "+table[2][0]+" | "+table[2][1]+" | "+table[2][2]+" | "+table[2][3]+" | "+table[2][4]+" |"); 
     System.out.println("---+---+---+---+---+---+"); 
     System.out.println(" 4 | "+table[3][0]+" | "+table[3][1]+" | "+table[3][2]+" | "+table[3][3]+" | "+table[3][4]+" |"); 
     System.out.println("---+---+---+---+---+---+"); 
     System.out.println(" 5 | "+table[4][0]+" | "+table[4][1]+" | "+table[4][2]+" | "+table[4][3]+" | "+table[4][4]+" |"); 
     System.out.println("---+---+---+---+---+---+"); 

     System.out.println("Enter a row (1-5): "); 
     Scanner scRow = new Scanner(System.in); 
     int m = scRow.nextInt(); 

     System.out.println("Enter a column (1-5): "); 
     Scanner scCol = new Scanner(System.in); 
     int n = scCol.nextInt(); 

     System.out.println("Enter a letter (S, M, A, R or T): "); 
     Scanner scChar = new Scanner(System.in); 
     char c = scChar.next().charAt(0); 

     if (m < 1 || m > 5){ 
     System.out.println("Invalid: Enter a valid row. "); 
     } 
     else if (n < 1 || n > 5){ 
     System.out.println("Invalid: Enter a valid column. "); 
     } 
     else if (c != 'S' && c != 'M' && c != 'A' && c != 'R' && c != 'T'){ 
     System.out.println("Invalid: Enter a valid character. "); 
     } 
     else{ 
     table[(m-1)][(n-1)] = c; 
     } 
    //if ((int)table[0][] == 391 && (int)table[1][] == 391 && (int)table[2][] == 391 && (int)table[3][] == 391 && (int)table[4][] == 391 
    // && (int)table[][0] == 391 && (int)table[][1] == 391 && (int)table[][2] == 391 && (int)table[][3] == 391 && (int)table[][4] == 391){ 
    // System.out.println("Congrats! You win!"); 
    //} 
    } 
    } 
} 

Что должно произойти в том, что, как только пользователь получил S M A R и Т в 5-символьной строке покрывающей весь массив 5x5 является то, что игра объявляет пользователь победителя. Это можно рассчитать путем добавления значений ASCII, которые в конечном итоге равны 391 в любом направлении. Если у кого-то есть решение с предпочтительным для цикла, это было бы здорово.

+0

Вам нужна вложенная петля. –

+0

Возможно, вы сможете использовать один сканер вместо трех. –

+0

Что произойдет, если строка содержит S M A S S? – ajb

ответ

0

Если вам нужно только посмотреть на линии они только что ввели их письмо на, то попробуйте следующее:

int total = 0; 
for (int column = 0; column < 5; column++) 
{ 
    total += table[m-1][column]; 
} 

if (total == 391) 
{ 
    // you won! 
} 

Если, «равняясь 391 в любом направлении», вы имеете в виду, что буквы могут появиться в столбцы или диагонали, то вам также нужно пройти через них. Можете ли вы пояснить, что это значит?

Кроме того, S, M, A, R, T не будет единственным набором из пяти букв, который будет содержать до 391, но вы фильтруете вход только на этих пяти буквах, поэтому вам должно быть хорошо ,

Для того, чтобы включать в себя все строки, таким образом, в том числе заданных значений:

for (int row = 0; row < 5; row++) 
{ 
    int total = 0; // reset the total on each row 

    // total the cells on the current row 
    for (int column = 0; column < 5; column++) 
    { 
     total += table[row][column]; 
    } 

    if (total == 391) 
    { 
     // you won! 
     break; // no need to continue calculating the rest of the rows 
    } 
} 

Чтобы проверить на колонке, просто поменять местами 'для' петли вокруг:

for (int column = 0; column < 5; column++) 
{ 
    int total = 0; // reset the total on each row 

    // total the cells on the current column 
    for (int row = 0; row < 5; row++) 
    { 
     total += table[row][column]; 
    } 

    if (total == 391) 
    { 
     // you won! 
     break; // no need to continue calculating the rest of the rows 
    } 
} 

Чтобы проверить диагоналями:

int total = 0; 

// total the cells on the current row 
for (int rowcolumn = 0; rowcolumn < 5; rowcolumn++) 
{ 
    total += table[rowcolumn][rowcolumn]; // notice that the both indices are identical 
} 

if (total == 391) 
{ 
    // you won! 
} 
+0

К сожалению, нет, оно также должно содержать предустановленные значения – Sythe

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