2016-04-05 13 views
0

Bu program, bir metin satırı ve çeşitli tam sayı satırları içeren bir metin dosyası alabilmeli ve bunları ayrı dizilerde saklamalıdır. Aşağıda bir metin dosyası örneği verilmiştir:Array, Java'daki bir dosyadan bir tamsayı dizisi oluştururken yalnızca sıfırlar içeriyor mu?

five hexing wizard bots jump quickly 
21 5 6 11 15 9 10 3 34 22 28 5 15 2 3 4 21 5 3 18 27 5 20 9 6 23 19 20 7 

bende bir karakter diziye metni saklamak için nasıl düşündüm ve ben metin dosyasında tam sayıları bir tamsayı dizisi nasıl ayarlanacağını anladım. Ancak, diziyi yazdırmaya çalıştığımda, metin dosyasında bulunan sayılarla değil, sıfırlarla doldurulur. İşte benim kodu (diziye metin dosyasından kopya tamsayılar programın alt kısmında kodu) şimdiye kadar geçerli:

import java.util.*; 
import java.io.*; 

public class Decoder 
{ 
public static void main(String[] args) throws IOException 
{ 
    Scanner keyboard = new Scanner(System.in); 
    String fileName; 

    System.out.println("Please enter the name of a file to be decoded: "); 
    fileName = keyboard.nextLine(); 

    File testFile = new File(fileName); 
    Scanner inputFile = new Scanner(testFile); 

    String keyPhrase = inputFile.nextLine(); 

    char[] letterArray = new char[keyPhrase.length()]; 
    letterArray = keyPhrase.toCharArray(); 

    int counter = 0; 
    while(inputFile.hasNextInt()) 
    { 
     counter++; 
     inputFile.nextInt(); 
    } 

    int[] numArray = new int[counter]; 

    int i = 0; 
    while(inputFile.hasNextInt()) 
    { 
     numArray[i++] = inputFile.nextInt(); 
    } 

    System.out.println(Arrays.toString(numArray)); 
} 

cevabı muhtemelen çok basit Java yeni (I ediyorum ve Genel olarak programlama, ama herhangi bir yardım takdir edilecektir!

+0

'inputFile.nextInt();' ... okuduğunuz şeyleri görmezden geliyorsunuz ... Oh ve sonra 'while (inputFile.hasNextInt())' ... zaten her int okuyorsunuz, o zaman nasıl olmalı? okumak için daha fazla? – Tom

+0

GirişDosyası dinlenmeli, böylece dosyanın başlangıcında, ikinci döngüye ulaştığı zaman, zaten tüm int (muhtemelen eof) – MadProgrammer

+0

@MadProgrammer * yazılmıştır. "Input_nile dinlenmelisiniz, böylece başında Dosya "* O dosyada başka bir" Tarayıcı "oluşturarak daha eski bir soruda bunu yaptı (sadece bir not gibi). – Tom

cevap

1

Satırları iki kez tam sayılarla okuyorsunuz - ilk defa yok sayıyoruz. Bu öbek okur ve (dizi olması gerekir ne kadar büyük bilmek) tüm sayıları sayar:

int counter = 0; 
while(inputFile.hasNextInt()) 
{ 
    counter++; 
    inputFile.nextInt(); 
} 

O zaman bu yığın daha tamsayılar okumaya çalışır ama zaten okundu ettik:

int i = 0; 
while(inputFile.hasNextInt()) 
{ 
    numArray[i++] = inputFile.nextInt(); 
} 

ArrayList kullanmayı deneyin. Özellikle bir dizi gerekiyorsa daha sonra iki toArray yöntemlerden birini kullanabilirsiniz

ArrayList<Integer> numbers = new ArrayList<Integer>(); 
while(inputFile.hasNextInt()) 
{ 
    numbers.add(inputFile.nextInt()); 
} 

: Onlara daha fazla şeyler eklemek gibi onlar dinamik büyüyecek. Diğer alternatif ise dosyanızı bir kez daha taramaktır - bir kez dizinin uzunluğunu almak için, daha sonra tekrar rakamları yüklemek için.

İlgili konular