私のコードをコンパイルして実行すると、ファイルの最初の行が出力され、次のすべてが表示されます。
java.lang.StringIndexOutOfBoundsException: String index out of range: -1
at java.lang.String.substring(Unknown Source)
at Popcorn1.main(Popcorn1.java:59)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at edu.rice.cs.drjava.model.compiler.JavacCompiler.runCommand(JavacCompiler.java:272)
そしてコード:
import java.io.*;
import java.util.Scanner;
public class Popcorn1 {
public static void main(String args[]) throws FileNotFoundException {
printHeader();
File file;
do {
Scanner in = new Scanner(System.in);
System.out.println("Enter the the file name");
String filename = in.next();
file = new File(filename);
} while (!file.exists());
FileReader inputFile = new FileReader(file);
Scanner inFile = new Scanner(inputFile);
System.out.println(" PopCorn Co-op");
System.out.println(" Production in Hundreds");
System.out.println(" of Pint Jars Per Acre");
System.out.println(" 1 2 3 4 5 6");
System.out.println("Farm Name ---|---|---|---|---|---|");
System.out.println();
// Printing out title and table header for reader to easily read data
String errorMSG = " ";
while (inFile.hasNextLine()) {
String inputLine = inFile.nextLine();
//System.out.print(inputLine);
int position;
String name;
int jars;
double acres;
position = inputLine.indexOf(',');//Get the Location of the comma to use as a delimiter
name = inputLine.substring(0, position); //Everything to the left of the comma is the farm name
System.out.printf("%-31s", name);
inputLine = inputLine.substring(position + 2, inputLine.length()); //rest of the string
Scanner line = new Scanner(inputLine);
{
//acres = 0;
jars = 0;
acres = 0;
if (line.hasNextDouble()) {
acres = line.nextDouble();
} else {
errorMSG += "There is missing data";
}
// jars = 0;
if (line.hasNextInt()) {
jars = line.nextInt();
} else {
errorMSG += "There is missing data";
}
}
int starsConversion = (int) (jars / acres / 25);
for (int i = 1; i < starsConversion; i++) {
if (i == 20) {
System.out.print("#");
} else {
System.out.print("*");
}
}
if (starsConversion < 20) {
for (int i = 1; i < (21 - starsConversion); i++) {
System.out.print(" ");
}
System.out.print("|");
{
System.out.println(); //go to the next line
}
}
System.out.println(errorMSG);
}
}
}