2016-03-30 3 views
0

Ich arbeite an einer Klassenzuweisung. Ich muss eine Datei einlesen, die Eingabezeilen enthält. Jeder Block von drei Zeilen ist eine strukturierte Menge: Die erste ist ein Polynom, die zweite ist ein anderes Polynom, die dritte ist eine Textzeichenfolge, die die algebraische Operation für die Polynomarithmetik angibt. Ich habe mein Programm so eingestellt, dass es jede Zeile in ein Array liest und dann analysiere ich die beiden Array-Indizes, die ganze Zahlen enthalten, in meinen Polynombegriff. Ich rufe die entsprechende Funktion auf der Grundlage der dritten Zeile auf. Mein Kampf besteht darin, einen Weg zu finden, den Prozess nach jeder dritten Zeile zurückzusetzen. Hier ist der Code für meine Hauptfunktion. Ich dachte, ich würde irgendwie eine i-Schleife (k-Schleife) benutzen, aber ich kann es nicht zum Laufen bringen. Jeder Einblick oder Vorschläge sehr geschätzt.Zyklische Aufruffunktion basierend auf Segmenten des Eingangs

Beispiel Eingabe:

3 2 4 5 

5 7 4 6 

subtract 

4 3 5 1 

1 2 3 4 

add 

Hier ist mein Code:

public static void main(String[] args) throws IOException { 

    Polynomial p1 = new Polynomial(); 
    Polynomial p2 = new Polynomial(); 
    int lines = 0; 

    List<String> list = new ArrayList<String>(); 

    try { 
     BufferedReader reader = new BufferedReader(new FileReader("Test.txt")); 

     String line=null; 

     while((line = reader.readLine()) != null) { 
      list.add(line); 
      lines++; 
     } // end while 
    } catch (FileNotFoundException e){ 
     e.printStackTrace(); 
    } 
    System.out.println("lines " + lines); 

    for (int k=0; k<lines; k++){ 
     String[] stringArr = list.toArray(new String[0]); 
     System.out.println(stringArr[k+0]); 
     System.out.println(stringArr[k+1]); 
     System.out.println(stringArr[k+2]); 

     String[] nums1 = stringArr[k+0].split(" "); 
     String[] nums2 = stringArr[k+1].split(" "); 

     for (int i=0; i<nums1.length; i+= 2) { 
      p1.addTerm(Integer.parseInt(nums1[i]), Integer.parseInt(nums1[i+1])); 
     } 
     for (int i=0; i<nums2.length; i+= 2) { 
      p2.addTerm(Integer.parseInt(nums2[i]), Integer.parseInt(nums2[i+1])); 
     } 

     if (stringArr[k+2].equalsIgnoreCase("add")) {add(p1,p2);} 
     else if (stringArr[k+2].equalsIgnoreCase("subtract")) {subtract(p1,p2);} 
     else if(stringArr[k+2].equalsIgnoreCase("multiply")) {multiply(p1,p2);} 
     else { 
      System.out.println("Bad input"); 
     } 
     nums1=null; 
     nums2=null; 
    } 
} 

Antwort

0

Vorschlag: so etwas wie die Scanner-Klasse versuchen? Fangen Sie die NoSuchElementException, wenn es Zeilen in der Datei ausgehen sollte.

Scanner scanner = new Scanner(new String("input")); 

while(scanner.hasNextLine()) { 
     String lineOne = scanner.nextLine(); 
     String lineTwo = scanner.nextLine(); 
     String lineThree = scanner.nextLine(); 
     calculateSomething(lineOne, lineTwo, lineThree); 
    } 

Es verwendet werden kann Strings (durch Leerzeichen getrennte standardmäßig)

private static int[] getPolynomialFactors(String line) { 
    Scanner splitter = new Scanner(line); 

    int[] p = new int[4]; 
    int counter=0; 

    while (splitter.hasNextInt()){ 
     p[counter] = splitter.nextInt(); 
     counter++; 
    } 
    return p; 
} 
+0

Vielen Dank! Ich lerne, Eingaben von Dateien zu lesen, daher sind Tipps bezüglich des Scanners sehr hilfreich. –

0

mit einem guten Schlaf zu lesen, ich war in der Lage, es herauszufinden. Ich benutzte eine for-Schleife und musste nur das Inkrementieren des Schleifenzählers modifizieren. Ich habe die Zeiger auf die Integer-Arrays zurückgesetzt, die ich verwendet habe, um die Ganzzahlen zu speichern, die von den ersten beiden Zeilen des Codeblocks analysiert wurden, wodurch sie effektiv zurückgesetzt werden. Hier ist mein aktualisierter Code, der funktioniert:

 public static void main(String[] args) throws IOException { 
     // TODO Auto-generated method stub 

     Polynomial p1 = new Polynomial(); 
     Polynomial p2 = new Polynomial(); 
     int lines = 0; 

     List<String> list = new ArrayList<String>(); 

     try { 
      BufferedReader reader = new BufferedReader(new FileReader("Test.txt")); 

      String line=null; 

      while((line = reader.readLine()) != null) { 
       list.add(line); 
       lines++; 
      } // end while 
     } catch (FileNotFoundException e){ 
      e.printStackTrace(); 
     } 
     System.out.println("lines " + lines); 
     String[] stringArr = list.toArray(new String[0]); 


     for (int k=0; k<lines; k+=3){ 

      System.out.println(stringArr[k+0]); 
      System.out.println(stringArr[k+1]); 
      System.out.println(stringArr[k+2]);    


      String[] nums1 = stringArr[k+0].split(" "); 
      String[] nums2 = stringArr[k+1].split(" "); 

      for (int i=0; i<nums1.length; i+= 2) { 
       p1.addTerm(Integer.parseInt(nums1[i]), Integer.parseInt(nums1[i+1])); 
      } 
      for (int i=0; i<nums2.length; i+= 2) { 
       p2.addTerm(Integer.parseInt(nums2[i]), Integer.parseInt(nums2[i+1])); 
      } 

      if (stringArr[k+2].equalsIgnoreCase("add")) {add(p1,p2);} 
      else if (stringArr[k+2].equalsIgnoreCase("subtract")) {subtract(p1,p2);} 
      else if(stringArr[k+2].equalsIgnoreCase("multiply")) {multiply(p1,p2);} 
      else { 
       System.out.println("Bad input"); 
       break; 
      } 
      nums1=null; 
      nums2=null; 
     } 
    } 
}