2016-04-29 5 views
-3

Der Problemcode ist unten, wenn Sie die gesamte Hauptmethode benötigen, um mir zu helfen, bitte fragen Sie. Der Code entspricht, aber nicht wie erwartet ausgeführt. Ich versuche, den Code ein Ausrufezeichen zurück zu melden, wenn die Zahl außerhalb der Grenzen/größer als die letzte Position des Quelltexts ist, die eine Zeichenfolge ist, die der Benutzer eingibt, so dass die Länge nicht vordefiniert werden kann. Ausnahme ist 'StringIndexOutOfBoundsException'String-Index außerhalb der Grenzen Ausnahme, auf einer if sonst-Anweisung

TDLR num ist ein int, Quelltext ist ein String, beide sind Eingaben. Ausnahme: Wenn Code ein '!' stattdessen.

import java.util.Scanner; 

public class Temp { 

    public static void main(String[] args) { 

     Scanner sc; 
     int result, num= 0, end = -2, temp, infolost, count; 
     String word, sourcetext, answer, space= " "; 
     String sourcetext2, temp2; 
     char input, result2, chalost; 
     sc = new Scanner(System.in); 

     System.out.println("please enter sourcetext"); 
     sourcetext = sc.nextLine(); // user inputs source text 
     sourcetext = sourcetext.toLowerCase(); // converts sourcetext into lowercase      
     System.out.print("Would you like to 1 encrypt, or 2 decrypt?"); 
     answer = sc.next(); // user inputs choice 

     if (answer.equals("1")||(answer.equals("encrypt"))) { 

      System.out.println("Please enter at least one word to encrypt"); 
      word = sc.next(); // user inputs one word 

      for (int i= 0; i < word.length(); i++) { 
       temp = sourcetext.indexOf(word.charAt(i)); // uses index to convert char positions int num 
       System.out.print(space + temp + space);   
      } 
      System.out.print(space + end); 
     } 
     else if (answer.equals("2")||(answer.equals("decrypt"))) { 

      System.out.println("Please enter digits, with one space between each. End with -2");     
      while (num > -2) { 
       num = sc.nextInt(); // num to decrypt 
       if (num > -2) {  
        result2 = sourcetext.charAt(num); // num converted into characters 
        System.out.print(result2); 
       } else if (num > sourcetext.length()) { 
        System.out.print("!"); 
       } else if (num<0) { 
        System.out.print("end"); 
       } 
      } 
     } 
    } 
} 
+0

post complete code 'StringIndexOutOfBoundsException' tritt auf, wenn Sie versuchen, auf Index zuzugreifen, der nicht im Bereich Ihrer Zeichenfolge ist. –

+1

Sie müssen vollständigen Code bereitstellen, möglicherweise mit Stack-Trace. – Areca

+3

Sie müssen lernen, einen Stack-Trace zu interpretieren und einen Debugger zu verwenden, anstatt uns zu bitten, Ihren Code für Sie zu debuggen. – Raedwald

Antwort

0

Dies entspricht einer IndexOutOfBounds Exception führen könnte - da -1 größer als -2 ist - aber immer noch Grenzen aus ...

if (num > -2){  
    result2 = sourcetext.charAt(num); // num converted into characters 
    System.out.print(sourcetext.indexOf(num)); 
} 

bearbeiten : Es sei denn, die Benutzereingabe ist -2 - die erste if -Statement wird immer ausgeführt ... Sie müssen wahrscheinlich re-wor k die Logik dort.

Edit2: Wenn num ist -1sourcetext.charAt(num); führt zu einem IndexOutOfBounds. Tun Sie etwas wie

+0

Können Sie das auf eine andere Art sagen, ich habe Probleme, dies zu verstehen. Ich möchte, dass die erste if-Anweisung immer ausgeführt wird, es sei denn, die Antwort lautet -2. Wenn Sie die Bearbeitung nicht gesehen haben, war diese >>> System.out.print (sourcetext.indexOf (num)); <<< ein Fehler, jetzt >>> System.out.print (result2); – Button

+0

Überprüfen Sie meine 2. Bearbeitung – user0815

+0

Ich bin zu neu, um Ihre Antwort zu verbessern, aber es hat funktioniert! Also das Hauptproblem war hier >> if (num == -2) <<< ja? Ich werde mit dem Code herumspielen, um zu sehen, wo ich trotzdem schief gegangen bin, danke, dass du dir die Zeit genommen hast, um zu helfen. – Button

0

es so versuchen:

int stringLength = sourcetext.length(); 

if (num > stringLength) { 
    System.out.print("!"); 
} 
else if (num<0) { 
    System.out.print("end"); 
} 
+0

Leider funktioniert das nicht – Button

+1

Können Sie den Fehler angeben? Es sollte kein OutOfBound haben, da Sie nur Werte vergleichen. BTW: if (answer == 1) || (answer.equals ("encrypt"))) {// Verwenden Sie == für den numerischen Wert. Überprüfen Sie immer noch Ihren Code, ich würde mich über eine Fehlermeldung freuen. –

+1

Die if-Anweisung 'else if (answer.equals ("2") || (answer.equals ("entschlüsseln"))) {' ist nicht der Fehlerort, sondern beginnt hier 'else if (num> sourcetext. length()) { System.out.print ("!"); ' wenn ich versuche, eine Zahl einzugeben, die größer als die letzte Position des String-Quelltexts ist. ZB Quelltext ist "hässlich", das ist drei Zeichen lang, wenn ich 5 einen Fehler einwerfe, anstatt ein Ausrufezeichen hinzuzufügen. – Button

Verwandte Themen