Java outputStream无法正确打印

时间:2012-02-29 00:28:12

标签: java outputstream

我正在为类创建一个简单的Java程序,该程序应该将变量petName,petType和numVisits输出到名为“PatientData.txt”的txt文件中。我正确打印petType和numVisits,但不是petName。我几乎肯定它与我的第一个垃圾声明有关,因为petType是唯一必须捕获2个以上单词的字符串。这是我的代码:

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 个答案:

答案 0 :(得分: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);
}