2012-02-29 85 views
1

我正在为类应该输出变量petName,petType和numVisits到名为“PatientData.txt”的txt文件的简单Java程序。我有petType和numVisits打印正确,但不是petName。我几乎是积极的,它与我的第一个垃圾声明有关,因为petType是唯一需要捕获2+词的字符串。这是我的代码:Java outputStream不能正确打印

import java.util.Scanner; 
import java.io.*; 
public class AcmeClinic 
{ 
public static void main(String[] args) 
{ 
    Scanner keyboard = new Scanner(System.in); 
    PrintWriter outputStream = null; 

    try 
    { 
    outputStream = new PrintWriter(new FileOutputStream("PatientData.txt")); 
    } 

    catch(FileNotFoundException e) 
    { 
    System.out.println("Unable to create the output file."); 
    System.exit(0); 
    } 

    System.out.println("Enter the number of pets to store information for:"); 
    int amount = keyboard.nextInt(); 
    String [] petNames = new String [amount]; 
    String [] petTypes = new String [amount]; 
    int [] numVisits = new int [amount]; 
    int index; 
    String junk; 
    outputStream.println("Patient Data:"); 
    outputStream.println("Pet Name Pet Type Number of Visits"); 
    if (amount >= 1) 
    { 
    for (index = 0; index < amount; index++) 
    { 
    System.out.println("Type the pet name, then press Enter:"); 
    petNames[index] = keyboard.nextLine(); 
    junk = keyboard.nextLine(); 
    System.out.println("Type the animal type (dog, cat, bird, rodent), then press Enter:"); 
    petTypes[index] = keyboard.nextLine(); 
    System.out.println("Type the number of visits last year, then press Enter:"); 
    numVisits[index] = keyboard.nextInt(); 
    outputStream.printf("%8s %-8s %-8d%n",petNames[index], petTypes[index],numVisits[index]); 
    } 
    } 

    outputStream.close(); 
} 
} 

示例输入:

Enter the number of pets to store information for: 
4 
Type the pet name, then press Enter: 
Champ 
Type the animal type (dog, cat, bird, rodent), then press Enter: 
dog 
Type the number of visits last year, then press Enter: 
8 
Type the pet name, then press Enter: 
Bob 
Type the animal type (dog, cat, bird, rodent), then press Enter: 
cat 
Type the number of visits last year, then press Enter: 
3 
Type the pet name, then press Enter: 
Mickey 
Type the animal type (dog, cat, bird, rodent), then press Enter: 
rodent 
Type the number of visits last year, then press Enter: 
1 
Type the pet name, then press Enter: 
Polly 
Type the animal type (dog, cat, bird, rodent), then press Enter: 
bird 
Type the number of visits last year, then press Enter: 
6 

实施例输出:(PatientData.txt)

Patient Data: 
Pet Name Pet Type Number of Visits 
     dog  8  
     cat  3  
     rodent 1  
     bird  6  
+1

fyi,'if(amount> = 1)'是多余的,应该删除,因为如果'amount == 0'循环会迭代零次。 – Bohemian 2012-02-29 00:33:42

+0

你是如何创建键盘广告outputStream变量的? – 2012-02-29 00:34:28

+0

你为什么要调用'junk = keyboard.nextLine()'? – 2012-02-29 00:38:04

回答

0

nextInt()是造成立即nextLine()使用它,以便避免。这将2个或多个字的工作,以及...

System.out.println("Enter the number of pets to store information for:"); 
int amount = Integer.parseInt(keyboard.nextLine()); 
String [] petNames = new String [amount]; 
String [] petTypes = new String [amount]; 
int [] numVisits = new int [amount]; 
outputStream.println("Patient Data:"); 
outputStream.println("Pet Name Pet Type Number of Visits"); 

for (int index=0;index < amount; index++) { 
    System.out.println("Type the pet name, then press Enter:"); 
    petNames[index] = keyboard.nextLine(); 
    System.out.println("Type the animal type (dog, cat, bird, rodent), then press Enter:"); 
    petTypes[index] = keyboard.nextLine(); 
    System.out.println("Type the number of visits last year, then press Enter:"); 
    numVisits[index] = Integer.parseInt(keyboard.nextLine()); 
    outputStream.printf("%8s %-8s %-8d%n", petNames[index], petTypes[index], numVisits[index]); 
} 

正如前面提到的,你不必在这里使用数组。你可以这样做,而不是...

System.out.println("Enter the number of pets to store information for:"); 
int amount = Integer.parseInt(keyboard.nextLine()); 
outputStream.println("Patient Data:"); 
outputStream.println("Pet Name Pet Type Number of Visits"); 

String petName = new String(); 
String petType = new String(); 
int numVisit = 0; 

for (int index = 0; index < amount; index++) { 
    System.out.println("Type the pet name, then press Enter:"); 
    petName = keyboard.nextLine(); 
    System.out.println("Type the animal type (dog, cat, bird, rodent), then press Enter:"); 
    petType = keyboard.nextLine(); 
    System.out.println("Type the number of visits last year, then press Enter:"); 
    numVisit = Integer.parseInt(keyboard.nextLine()); 
    outputStream.printf("%8s %-8s %-8d%n", petName, petType, numVisit); 
} 
+0

好吧,但如果petName是2个词如“灰鹦鹉”? – Chromey 2012-02-29 02:24:46

+0

@Chromey:编辑了我的答案。对于第一次没有查看多个单词的道歉。多个单词现在可以正常工作。 – neo108 2012-02-29 03:37:58

+0

非常感谢! – Chromey 2012-02-29 05:06:13