当我编译它并运行输出文件的第一行时,我的代码然后它说明所有这些:
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);
}
}
}
答案 0 :(得分:3)
如果没有该文件,很难确定发生了什么,但看起来像是
position = inputLine.indexOf(',');
返回-1(它在文件中找不到',',因此会给你一个无效的索引。
尝试打印出位置,确保其有效。
System.out.println("Position: " + position);
System.out.println("Length: " + inputLine.length());
System.out.println("Trimmed: " + inputLine.trim().length());
如果长度为0,或者只是空格,则不会有逗号。
这可以通过在阅读nextLine后添加以下内容来解决:
if(inputLine.trim().length() == 0)
continue
if(inputLine.indexOf(",") == -1)
System.out.println("There is no comma on this line: " + inputLine);