2016-02-24 2 views
1

Я работаю над проблемой Project Euler 11: В сетке 20 × 20 ниже четыре цифры по диагональной линии отмечены красным цветом.Чтение из TXT-файла и импорт данных в 2D-arraylist

(я не включил номера просто так мой вопрос легче следовать. Если вы хотите, чтобы обратиться к нему, ссылка https://projecteuler.net/problem=11)

Произведение этих чисел составляет 26 × 63 × 78 × 14 = 1788696.

Что представляет собой наибольшее произведение четырех соседних номеров в одном направлении (вверх, вниз, влево, вправо или по диагонали) в сетке 20 × 20?

Моя проблема заключается в том, что я хочу ввести эти данные в 2D arraylist, но я не уверен, как это сделать. Пока что это мой код. Я знаю, что это может быть не так уж и важно, чтобы решить это, но я все еще участвую, как вы можете ясно сказать, и поэтому на самом деле не заботится о том, чтобы уточнить код и сделать его более простым или коротким на данном этапе. Все, что мне нужно, это знать, как хранить его в качестве 2D-арраиста, тогда я считаю, что я должен идти хорошо.

import java.util.Scanner; 
import java.io.File; 
import java.util.ArrayList; 
@SuppressWarnings("unchecked") 
public class main{ 
public static int row(ArrayList data){ 
    int product=1;//product of any four numbers in sequence across 
    int max=0;//max product going across 
    int item;//sets value of data 
    int y=0;//counts position of data (1-4) 
    int rownum;//number row 
    int column;//number column 
    Object num;//used to extract data from arraylist before converting into int 
    for(column=0;column<16;column++){ 
     while(y<4){ 
      item=x+y; 
      num=data.get(item); 
      product*=(Integer) num; 
      if (product>max){ 
       max=product; 
      } 
      y++; 
     } 
     product=1; 
     y=0; 
    } 
    return max; 
} 

public static void main(String[] args){ 
    File path=new File("../numbers.txt"); 
    int word;//represents number column 
    int max;//max product of any four numbers in order 
    int product=1;//max product of each individual way (across, down, diagonal) 
    int line;//each individual number 
    ArrayList data=new ArrayList(); 
    try{ 
     Scanner in=new Scanner(path); 
     while (in.hasNextLine()){ 
      for(word=0;word<16;word++){//goes across a row 
       line=in.nextInt(); 
       data.add(line);//adds file to arraylist 
      } 
     } 
    } 
    catch(Exception ex){ 

    } 
    max=row(data); 
    System.out.println(max); 
} 

Спасибо за вашу помощь.

ответ

1

Технически двумерная ArrayList является ArrayList из ArrayLists:

ArrayList<ArrayList<Integer>> numbers = new ArrayList<>(); 

Однако, в этом случае вы можете использовать 2D массив вроде этого (который также является массивом массивов):

int[][] numbers = new int[20][20]; 

Затем вы можете ввести ваши номера с помощью вложенного цикла для:

for (int i=0; i<20; i++){ 
    for (int j=0; j<20; j++){ 
     numbers[i][j] = /*yadda yadda*/; 
    } 
} 
Смежные вопросы