2016-04-05 5 views
0

So muss dieses Programm in der Lage sein, eine Textdatei zu empfangen, die eine Textzeile und verschiedene Zeilen von ganzen Zahlen enthält und sie in separaten Arrays speichert. Hier ist eine Textdatei Beispiel:Array enthält nur Nullen beim Erstellen eines Integer-Arrays aus einer Datei in Java?

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 

Ich habe herausgefunden, wie der Text in ein Zeichenfeld zu speichern, und ich habe herausgefunden, wie ein Integer-Array einzurichten, um die ganzen Zahlen in der Textdatei übernehmen. Wenn ich jedoch versuche, das Array zu drucken, wird es mit Nullen und nicht mit den Zahlen in der Textdatei gefüllt. Hier ist mein Code so weit (der Code, kopiert die Zahlen aus der Textdatei in das Feld am unteren Rande des Programms ist):

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)); 
} 

Die Antwort ist wahrscheinlich sehr einfach (ich bin neu in Java und Programmierung im Allgemeinen), aber jede Hilfe wäre willkommen!

+0

'inputFile.nextInt();' ... ignorierst du was du liest ... Oh und dann 'while (inputFile.hasNextInt())' ... du liest schon alle int, also wie sollte es da sein mehr zu lesen? – Tom

+0

Sie müssen inputFile ablegen, so dass es am Anfang der Datei steht, bis es die zweite Schleife erreicht. Es liest bereits alle Ints (möglicherweise eof) – MadProgrammer

+0

@MadProgrammer * "Sie müssen inputFile pausieren, damit es am Anfang von ist die Datei "* Er hat das schon in einer älteren Frage getan, indem er einen anderen' Scanner' für diese Datei erstellt hat (nur als eine Notiz). – Tom

Antwort

1

Sie lesen die Zeile mit Ganzzahlen zweimal - ignorieren sie alle das erste Mal. Dieser Brocken liest und ignoriert alle Zahlen (zu wissen, wie groß das Array sein muss):

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

Dann ist dieser Brocken versucht, mehr ganze Zahlen zu lesen, aber sie haben bereits gelesen:

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

Versuchen Sie es mit einem ArrayList. Sie werden dynamisch wachsen, wie Sie mehr Dinge zu ergänzen:

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

Sie dann eine der beiden toArray Methoden verwenden können, wenn Sie speziell ein Array benötigen. Die andere Alternative besteht darin, Ihre Datei zweimal zu scannen - einmal, um die Länge des Arrays zu ermitteln, und dann wieder, um die Zahlen tatsächlich zu laden.

Verwandte Themen