Ich bin mir nicht sicher, was ich falsch mache, die Aufgabe ist es, einen Code zu erstellen, der eine Temperatur von C nach F oder von F nach C konvertiert, bis der Benutzer entscheidet, dass sie fertig sind, bin ich auch soll eine Fehlermeldung ausgeben, wenn ein ungültiges Zeichen erscheint, und den Benutzer korrigieren lassen, ohne erneut nach dem numerischen Teil zu fragen.Java Temp-Konvertierungsprogramm. korrekte Ausgabe, aber Fehler
Das Programm scheint gut zu laufen, bis ich einen anderen Wert als 'c' 'C' 'f' oder 'F' eingeben. An diesem Punkt bekomme ich immer noch die gewünschte Ausgabe, aber als ich hier einen Fehler erhalte, ist mein Code.
import java.util.Scanner;
public class ProjectThree
{
public static void main(String[] args)
{
Scanner keyboard = new Scanner(System.in);
System.out.println("Please enter a temperature to be converted followed"
+ "\nby a C or c for Celsius or an F or f for Fahrenheit. If "
+ "\nfinished converting temperatures enter done.");
String userInput, intString;
userInput = keyboard.nextLine();
while (!(userInput.equalsIgnoreCase("done")))
{
int length, temp, degreesC, degreesF;
length = userInput.length();
intString = userInput.substring(0,length - 1);
temp = Integer.parseInt(intString);
char scale = userInput.charAt(length - 1);
while (!((scale == 'c') || (scale == 'C') || (scale =='f') ||
(scale == 'F')))
{
System.out.println("Error: Invalid temperature unit. Enter a C or c"
+ " for Celsius or an F or f for Fahrenheit.");
String errorInput = keyboard.next();
scale = errorInput.charAt(0);
userInput = intString + errorInput;
}
switch (scale)
{
case 'C':
case 'c':
degreesF = (9 * (temp/5) + 32);
System.out.println(userInput + " is equal to " + degreesF
+ "F");
break;
case 'F':
case 'f':
degreesC = (5 * (temp - 32))/9;
System.out.println(userInput + " is equal to " + degreesC
+ "C");
break;
}
System.out.println("\nPlease enter a temperature to be converted followed"
+ "\nby a C or c for Celsius or an F or f for Fahrenheit. If "
+ "\nfinished converting temperatures enter done.");
userInput = keyboard.nextLine();
}
}
}
und der Fehler ist
Please enter a temperture to be converted followed
Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: -1
by a C or c for Celsius or an F or f for Farenheit. If
finished converting tempertures enter done.
at java.lang.String.substring(String.java:1955)
at ChapterFour.ProjectThree.main(ProjectThree.java:33)
Java Result: 1
BUILD SUCCESSFUL (total time: 5 seconds)
Sie sollten den Code in eine try catch-Anweisung setzen –
Welcher ist die Eingabe, die diese Ausnahme generiert? –
Verwenden Sie einen Debugger und Sie werden herausfinden, warum Sie diese Ausnahme erhalten – Jens