java - Input Mismatch Exception on a method calling Scanner's nextLine -


i need use method

    public static string readstring() {       return input.nextline();  } 

in order use scanner method next.line(), requirement of project, thing when use static method projectutils.readstring() gather user input string throws me lot of errors, cant understand why, im using way

       public static void encryptastring() {          projectutils.println("enter phrase , key");         string p = projectutils.readstring();         projectutils.println("enter key");         int k = projectutils.readinteger();         projectutils.println(encryptstring.encryptstring(p,k )); 

but ends terminating , throwing

exception in thread "main" java.util.inputmismatchexception @ java.util.scanner.throwfor(unknown source) @ java.util.scanner.next(unknown source) @ java.util.scanner.nextint(unknown source) @ java.util.scanner.nextint(unknown source) @ projectutils.readinteger(projectutils.java:24) @ projectutils.encryptastring(projectutils.java:88) @ stringmenumanager.run(stringmenumanager.java:37) @ projectutils.operationsonstrings(projectutils.java:69) @ mainmenumanager.run(mainmenumanager.java:47) @ p1main.main(p1main.java:9) 

thanks in advance.

mcve

the main class

public class main {      public static void main(string[] args) {         mcve.encryptastring();     } } 

the mcve method or projectutils class in original project

import java.util.scanner;      public class mcve {  private static final scanner input = new scanner(system.in);  public static void println(string s) {      system.out.println(s);  } public static int readinteger() {      // moment, assume input     // valid integer.... want      // more robust , explicitly read , test first if     // input integer or not....     return input.nextint();  } public static string readstring() {      // moment, assume input     // valid string.... want      // more robust , explicitly read , test first if     // input integer or not....     return input.nextline();  }  public static void encryptastring() {      mcve.println("enter phrase , key");     string p = mcve.readstring();     int k = mcve.readinteger();     mcve.println(encryptstring.encryptstring(p,k ));       }    } 

and encryption class

 public class encryptstring {  private static final int alength = 26;   /**  * encrypt string using given key value.   * @param s string encrypted  * @param key key   * @return encrypted string  */ public static string encryptstring(string s, int key) {     // if key value not in accepted range (-25..25)     // encrypted string same input string     if (key < -25 || key > 25)          return s;       // key valid, construct encrypted string      // described in p1 specs...     string newstring = "";     for(int x = 0; x<s.length(); x++)     {         if(((int)s.charat(x)>64&&(int)s.charat(x)<123))             newstring = newstring + encryptchar(s.charat(x), key);         else             newstring = newstring + s.charat(x);      }     return newstring; }   /**  * encrypt particular character.  * @param ch character encrypt - assumed letter ‘a’..’z’ or ‘a’..’z’  * @param key key used. assumed value in range (-25..25)  * @return new character after encryption  */ private static char encryptchar(char ch, int key) {     // pre: ch letter 'a'..'z' or 'a'..'z'     // pre: key integer in range -25..25      int base;      if (character.isuppercase(ch))         base = (int) 'a';      else          base = (int) 'a';      return (char) (math.abs((((int) ch - base) + key + alength)                                  % alength) + base);  } 

}

although i'm not sure exact underlying problem, there seems newline in input shouldn't there. it's causing first input.nextline() read (presumably) empty line.

a temporary workaround consume newline calling readstring() , ignoring return value, reading actual string input readstring() call.


Comments