2017-11-26 1 views
-1

Als ein Schulprojekt wurde ich gebeten, ein Programm zu machen, das Initialen des eingegebenen Namens anzeigt (zB. Für Akshat Abhay Shetye würde es A. Shetye anzeigen).String Index Out of Bounds mit charAt

Dies funktioniert gut auf meinem Schule PC, der eine alte bluej und Java ausführt, aber einen Fehler (StringIndexOutOfBoundsException: String-Index außerhalb des Bereichs), wenn ich es ausführen. Das ist mein Programm:

import java.util.*; 
import java.lang.*; 
public class dispInitials{ 
    public static void main (String args[]){ 
     Scanner sc = new Scanner(System.in); 
     System.out.println("Enter your full name"); 
     String name = sc.next(); 
     //name = name.trim(); 
     String inName= name.charAt(0)+". "; 
     int i = 1; 
     for(i=1;i<(name.length()-1);i++){ 
      if(Character.isWhitespace(name.charAt(i))) 
      break; 
     } 
     i++; 
     inName=inName+name.charAt(i)+". "; 
     for(i=i;i<name.length();i++){ 
      if(Character.isWhitespace(name.charAt(i))) 
      break; 
     } 
     i++; 
     System.out.println("The name is "+inName); 
    } 
} 

Kann jemand den Fehler erklären (in Zeile 16)?

+3

'i = I' ein Tippfehler sein muss. – Eran

Antwort

0

Der Fehler ist in Ihrem Namen eingegeben.

Ersetzen Sie Ihre Eingabezeile mit diesem Code:

String name = sc.nextLine(); 
+0

Dies schien das Problem zu beheben. Aber warum ist String Name = sc.next(); - nicht funktionieren? –

+0

Weil wir sagen "Akshat Abhay Shetye" war deine Eingabe. sc.next() würde nur 'Akshat' von Ihrer Eingabe erhalten und 'Abhay Shetye' würde unslos bleiben (bis sc.next() erneut aufgerufen wird). Ich hoffe, es löscht Ihre Verwirrung? –

+0

Ja. Aber warum funktioniert es auf dem alten BlueJ und Java? (Mein Schul-PC) –

4
for(i=1;i<(name.length()-1);i++) 

Also, wenn die Schleife beendet, i Dann name.length - 1

gleich ist, sind Sie

tun
i++; 
inName = inName+name.charAt(i)+". "; 

Sie sind also versuchen, die Zeichen bei Index name.length zuzugreifen. Aber es gibt keinen solchen Index. der letzte gültige Index ist name.length - 1. Daher die Ausnahme.

Sie müssen lernen, einen Debugger zu verwenden und Zeile für Zeile durch den Code zu gehen, wobei Sie die Werte der Variablen auf dem Weg überprüfen. Oder fügen Sie dem Code mindestens System.out.println() hinzu, um Ihre Probleme zu diagnostizieren. Dies ist im Grunde die tägliche Arbeit eines Entwicklers.