2017-02-19 4 views
0

Ich schreibe ein Programm, das Daten in ein Programm eingibt und einen Untersuchungsbericht erstellt, jedoch ist die Formatierung weg und kann nicht genau finden, was es ist. Hier ist ein Screenshot meiner Ergebnisse mit dem folgenden Code unten und wie das Format aussehen soll. https://gyazo.com/4f4f4d6c43b4e0c3545a48f9e06565b5Java-Format ist weg

/* 
* file : 
* name : 
* course : 
* description: Process input file to print formatted data and summary data 
*/ 

package program04; 

import java.util.Scanner; 

public class Program04 
{ 

// TODO Declare and initialise class variables here 

/** 
* @param args 
*/ 
public static void main(String[] args) 
{ 

    // TODO: Declare and initialise local variables here: 
    // isValid 

    boolean isValid; 

    String patientName; 
    int patientID; 
    String gender; 
    float exam1, exam2, exam3; 
    double avg; 
    String pos_neg; // will always be a color 


    // System.out.println top line of report 
    System.out.println("*~~< Patient Exam Report >~~*"); 
    // System.out.println blank line 
    System.out.println(""); 
    // Name  Pat. M/F Exam1  Exam2  Exam3  AVG Risk Level 
    // ----  ---- --- ----- -----  ----- ----- ---------- 
    // print words 
    // print column headers; 
    System.out.printf("%-12s", "Name"); 
    System.out.printf("%-13s", "Pat."); 
    System.out.printf("%-8s", "M/F"); 
    System.out.printf("%-8s", "Exam1"); 
    System.out.printf("%-8s", "Exam2"); 
    System.out.printf("%-8s", "Exam3"); 
    System.out.printf("%-6s", "AVG"); 
    System.out.printf("%-13s", "Risk Level \n"); 
    // print dashes 
    System.out.printf("%-11s", "----"); 
    System.out.printf("%-12s", "----"); 
    System.out.printf("%-7s", "---"); 
    System.out.printf("%-7s", "----"); 
    System.out.printf("%-7s", "----"); 
    System.out.printf("%-7s", "----"); 
    System.out.printf("%-5s", "----"); 
    System.out.printf("%-12s", "----------\n"); 

    Scanner input = new Scanner(System.in); 

      // Start for loop1 
      for (int i = 0; i < 10; i++) {     

    // input(patientName)/print; 
    patientName = input.next(); 
    System.out.printf("%-12s", patientName); 

    // input(patientID) 
    patientID = input.nextInt(); 
    System.out.printf("%-13s", patientID); 

    // input(gender); 
    gender = input.next(); 
    System.out.printf("%-8s", gender); 

    // input(exam1); 
    exam1 = input.nextFloat(); 
    System.out.printf("%-8.2f", exam1); 

    // input(exam2); 
    exam2 = input.nextFloat(); 
    System.out.printf("%-8.2f", exam2); 

    // input(exam3); 
    exam3 = input.nextFloat(); 
    System.out.printf("%-8.2f", exam3); 


      // Create isValid variable to equal true unless if/else statement fails it changes to false 
      // If true, do nothing... If false, Print "Invalid data" 
    isValid = true;     
    if (1111 <= patientID && patientID <= 9999) { 
    } 
      else { 
     isValid = false; 
    } 
    if (0.00 <= exam1 && exam1 <= 100.00) { 
    } 
      else { 
     isValid = false; 
    } 
    if (0.00 <= exam2 && exam2 <= 100.00) { 
    } 
      else { 
     isValid = false; 
    } 
    if (0.00 <= exam3 && exam3 <= 100.00) { 
    } 
      else { 
     isValid = false; 
    } 

    if (isValid == true) {     
      // Find Average 
      avg = (exam1 + exam2 + exam3)/3; 
      System.out.printf("%-6.2f", avg); 
      // If else statement to decide if average is above X number Print Y 
      if (avg >= 97) { 
       System.out.printf("%-13s", "RED\n"); 
      } else if (avg > 88) { 
       System.out.printf("%-13s", "ORANGE\n"); 
      } 
      else if (avg > 78) { 
       System.out.printf("%-13s", "YELLOW\n"); 
      } 
      else if (avg > 70) { 
       System.out.printf("%-13s", "BLUE\n"); 
      } 
      else { 
       System.out.printf("%-13s", "GREEN\n"); } 
    } 
      else { 
     System.out.println("~~ Invalid data~~\n"); 
    } 
      } // end loop1 

      System.out.println(" "); 
      System.out.println("Summary\n"); 


      System.out.println(" "); 
      System.out.println("*< end of report >*"); 
} 
} 
+0

zu schreiben bedeutete Ist es möglich, dass einige Patientennamen Leerzeichen haben führende? –

+0

Ich glaube nicht, die Eingabedatei, die ich benutze, heißt input.data und eine vollständige Kopie einfügen von https://gyazo.com/33a83332e1cc5686d4afc2bf27757719 – Devin

Antwort

0

Wenn Sie schreiben

System.out.printf("%-13s", "RED\n"); 

Sie Java bitten die Zeichenfolge "RED\n" in einer Säule mit einer Länge 13, Klotzen den Rest mit Leerzeichen linksbündig. Das Ergebnis ist daher "RED\n ", wodurch Leerzeichen zum Anfang der nächsten Zeile hinzugefügt werden.

Sie können dieses Problem beheben, indem Sie den Newline im Format-String setzen, wo es hingehört:

System.out.printf("%-13s\n", "RED"); 

oder durch die Linie getrennt endet:

System.out.printf("%-13s", "RED"); 
System.out.println(); 

Da Sie nur einen String Hinzufügen bis zum Ende der Zeile, brauchen Sie nicht wirklich die Formatzeichenfolge und könnten einfach schreiben:


Apropos println, vergessen Sie nicht, dass die ln in println bedeutet, dass es eine Newline hinzufügt. Es gibt print, wenn Sie keine neue Zeile hinzufügen möchten. Also statt

System.out.println("~~ Invalid data~~\n"); 

Sie wahrscheinlich

System.out.println("~~ Invalid data~~"); 
+0

Danke, das macht mehr Sinn und behoben mein Problem! – Devin