2017-12-05 2 views
0

(es ist meine Hausaufgaben Aufgabe. So kann ich keine Änderungen an der Aufgabe machen, wie die Regeln der Eingabe ändern.)Java drucken mehrere Zeilen nach dem Lesen mehrerer Zeilen

Ich brauche

a^m mod n 
berechnen

und drucken Sie das Ergebnis aus. (Ich habe bereits herausgefunden, wie die Berechnung zu codieren.)

Aber die Frage gesagt, es wird mehrere Zeilen eingegeben werden:

IN: 

12 5 47 
2 4 89 
29 5 54 

und alle müssen die Ergebnisse drucken, zusammen nach dem Lesen all Zeilen der Eingabe. (Sie können nicht die Ergebnisse drucken direkt nach einer Eingabezeile.)

OUT: 

14 
16 
5 

Der Code, den ich bisher versucht habe:

import java.util.Scanner; 

public class mod { 
    public static void main(String[] args){ 
     Scanner input = new Scanner(System.in); 
     int count = 0; 
     while (input.hasNextLine()){ 
      count++; 
     } 
     int[] array = new int[count]; 
     for (int i = 0; i < count; i ++){ 
      int a = input.nextInt(); 
      int m = input.nextInt(); 
      int n = input.nextInt(); 
      int result = (int)((Math.pow(a, m)) % n); 
      array[i] = result; 
     } 
     for (int x : array){ 
      System.out.println(x); 
     } 
    } 
} 

Ich habe versucht, die Linien der Eingabe zu zählen und bauen ein Array dieser Größe, um die Ergebnisse zu speichern.

Aber es scheint, dass mein Code das Ende der Eingabe nicht erkennt und Schleife bleibt.

+0

Sie müssen in Ihrer ersten Schleife, jede Zeile lesen und die Berechnung auf dieser Linie und gibt das Ergebnis durchführen, andernfalls müssen Sie Schließen und öffnen Sie die Datei erneut, bevor Sie versuchen, sie erneut zu lesen. – MadProgrammer

+0

Überprüfen Sie meine Antwort und Erklärung. – prsvr

+0

Woher wissen Sie, wenn der Benutzer die Eingabe beendet hat? –

Antwort

1

Sie können die Benutzereingabe in der ursprünglichen Schleife mit einer List<String> speichern, würde ich vorschlagen, die Schleife auf eine leere String zu beenden und nur Zeilen, die die drei Zahlen durch Leerzeichen getrennt übereinstimmen. Außerdem würde ich das Ergebnis in der zweiten Schleife ausdrucken. Dann brauchen Sie kein Ergebnis array. Ich würde auch bevorzugen formatiert io (d. H. System.out.printf). Wie,

Scanner input = new Scanner(System.in); 
List<String> lines = new ArrayList<>(); 
while (input.hasNextLine()) { 
    String line = input.nextLine(); 
    if (line.isEmpty()) { 
     break; 
    } else if (line.matches("\\d+\\s+\\d+\\s+\\d+")) { 
     lines.add(line); 
    } 
} 
int count = lines.size(); 
for (int i = 0; i < count; i++) { 
    String[] tokens = lines.get(i).split("\\s+"); 
    int a = Integer.parseInt(tokens[0]), m = Integer.parseInt(tokens[1]), 
      n = Integer.parseInt(tokens[2]); 
    int result = (int) ((Math.pow(a, m)) % n); 
    System.out.printf("(%d^%d) %% %d = %d%n", a, m, n, result); 
} 

ich mit Ihnen zur Verfügung gestellten Eingang getestet,

12 5 47 
2 4 89 
29 5 54 

(12^5) % 47 = 14 
(2^4) % 89 = 16 
(29^5) % 54 = 5 
+0

gelesen Es funktioniert !! Vielen Dank! –

Verwandte Themen