I want to print last message when user inputs q but it gives an error.
Language Translator Program
Please enter the input sentence (press q to exit):
Robin came to Montreal, Canada in 2009.
Robin stays in Montreal for 11 years. Montreal is in Canada.
Please enter the input sentence (press q to exit):
Lucy came to Berlin, Germany in 2000.
Lucy stay in Berlin for 20 years. Berlin is in Germany.
Please enter the numbers along operation (press q to exit):
q
Thanks for using translator program.
import java.util.Scanner; public class MiniTranslator { public static void main(String[] args) { String message =""; do { //Declaring scanner Scanner keyboard = new Scanner(System.in); //Printing greeting message System.out.println("---------------------------------------------------------n" +"tLanguage Translator Programn" +"---------------------------------------------------------"); System.out.println("Please enter the input sentence (press q to exit): n"); message = keyboard.nextLine(); String[] arr = message.split("[ ,.]+",8); String name = arr[0]; String city = arr[3]; String country = arr[4]; String year = arr[6]; int noOfYears =2020 - (Integer.parseInt(year)); System.out.println("n" + name +" stay in " + city +" for " + noOfYears +" years. " + city +" is in " + country +"."); System.exit('q'); keyboard.close(); } while(message!="q"); if(message =="q") { System.out.println("Thanks for using translator program"); } } }
Advertisement
Answer
Ok, you have a number of immediate issues
message!="q"
is not how you compare String
s in Java, you should be using !"q".equals(message)
instead (same with ==
, which would become "q".equals(message)
for example)
But, your main problem is here …
System.out.println("Please enter the input sentence (press q to exit): n"); message = keyboard.nextLine(); String[] arr = message.split("[ ,.]+",8); String name = arr[0]; String city = arr[3]; String country = arr[4]; String year = arr[6]; int noOfYears =2020 - (Integer.parseInt(year));
You’ve made an assumption on what message
contains, instead of taking the time to ensure if contains what you think.
So, when message
is q
, your array will contain only one element, so as soon as you do String city = arr[3];
you have an array index out of bounds issue.
A “simple” solution might be to check if message
is equal to q
before you split, but a better solution would be to check the number of elements in array…
if (arr.length == 7) { // Process the result } else if (!"q".equals(message)) { // Invalid input }
Also, as has been stated, you should create your Scanner
once, outside of the loop and NOT close it – as you’d terminate the undying system input stream as well, which isn’t pretty