2012-03-07 1 views
0

для начала я хочу сказать, что это не домашнее задание или что-то еще, я просто хочу получить более глубокое знание об этих типах массивов с помощью ввода-вывода, поэтому не стесняйтесь просто рассказывать мне, как вы решить эту проблему с помощью сканера, если его решаемая: Pjava - сканирование txt в 2D-массивы с собственным классом

, если у меня есть текстовый файл, который, как:

car 1 2 3 4 5 
    boat 1 2 3 4 5 
    plane 1 2 3 4 5 

и я сделал новый класс в новом .java-файл, который является абстрактным 2d массив:

class Type 
    { 
      String type; 
      int number; 
    } 
    public toString() 
    { 
      return String.format("%02d:%02d", type, number); 
    } 

, возможно получить такой отпечаток, как:

car:1 car:2 car:3 
    boat:1 boat:2 boat:3 

etc? Благодарю.

редактировать: также ArrayList конечно ..

edit2:

while (scanner.hasNext()) 
    { 
     list.add(scanner.hasNext(), 0); //the array should be <car, 0> 
    }         //later i will loop through numbers 
+0

Это решаемая. Почему бы не попробовать сначала перед публикацией здесь? Вы не сломаете свой компьютер, выполнив это, и даже если ваш код не сработает, вы узнаете гораздо больше о том, как пытаться продвигать свои способности, чем если бы кто-то лопнул, чтобы вы получили решение. –

+0

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

+1

Вы заявляете: 'Я пробовал, но, к сожалению, у меня так много других, чтобы учиться, как математика, поэтому я не слишком много времени, чтобы экспериментировать ». Значит, вы говорите, что ваше время более ценно, чем наше? Давай же! –

ответ

0

псевдо-код, что я предлагаю это:

create line Scanner 
while scanner has next *line* 
    get the next line 
    use String#split(" ") to create a String array from this line 
    Create your object from the items in this array 
    Add your new object into your list 
end while loop 
+0

да, я думаю, это ответ, я сделал подобный псевдо-эскиз, когда я подумал об этой проблеме: (в то время как сканер имеет следующую строку) (сохраните следующую строку сначала в списке массивов <Тип, Номер>) (в то время как scanner.hasNextInt(), напечатайте и увеличивайте число) , и я до сих пор не понимаю, как заставить мои 2d массивы работать должным образом, как мое редактирование, поэтому спасибо за сообщение и плохо верните эту проблему в пару недель, когда у меня есть больше времени, чтобы узнать о 2d-массивах в действии со сканерами, im не получите нигде в этой точке: P darnit, codebrackets не работает для ответов>. < –

0

Первое, что приходит на ум, это (если ваш файл всегда будет иметь эту структуру):

  • Прочитайте свою строку и используйте string.split("\\s+");, чтобы разбить вашу линию на токены. (\\s+ обозначает одно или несколько мест в языке регулярных выражений).

  • Если вы можете быть уверены, что слово всегда будет первым элементом в строке, то вы можете выполнить итерацию со своего второго токена (ваш первый номер) до вашего последнего токена (ваш последний номер) и с каждой итерацией вы создаете новый объект Type, где type - это первый токен, а number - токен nth.

Вышеупомянутые должны позволять вам создавать объекты, которые при печати будут давать желаемый результат.

Если с другой стороны, порядок маркеров не известен, но вы уверены, что в каждой строке вы будете иметь одно слово и n номера, вы можете использовать дополнительные регулярные выражения, такие как ^\\w+$ и ^\\d+$, чтобы увидеть, токеном является либо слово, либо цифра соответственно. Как только вы узнаете, какой токен является тем, вы можете обратиться к вышеуказанным пунктам, чтобы заставить ваш код работать.

Для получения дополнительной информации о регулярных выражениях вы можете ознакомиться с учебным пособием this.

+0

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

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