help with Scanner

Collapse
X
 
  • Time
  • Show
Clear All
new posts
  • bvav22
    New Member
    • Feb 2009
    • 4

    help with Scanner

    Hey guys, im trying to finish an assignment for a java class, and i have finished the program except for one part. The program requires that i take 3 values inputted from the user, the first 2 must be digits between 0 and 9, and the third an operator.
    the operator decides if the two numbers are added subtracted...et c. anyways the things i cannot get, is i need to check if they enter valid digits, and not letters, however if i do put a letter in, scanner gives me an exception. it happens at line 14 when you enter a letter.... how can i test if it is a letter... any suggestions?


    here is my code

    Code:
    import java.util.Scanner;
    import java.text.DecimalFormat;
    
    public class problem1 {
    public static void main(String[]args){
    	
    	double num1,  num2, answ;
    
    	String tString,num1Word = " ",num2Word= " ";
    	Scanner scan = new Scanner(System.in);
    	DecimalFormat formatter = new DecimalFormat("0");
    	
    	System.out.println("Please enter two numbers between 0 and 9 ");
    	num1= scan.nextDouble();
    	num2= scan.nextDouble();
    	
    	if(Character.isDigit((Double.toString(num1)).charAt(0))){
    		
    	}
    	else{System.out.println("Please Enter Digits only!");
    	System.exit(0);
    	}
    	
    	switch((int)num1){
    	case 0: num1Word= "Zero";
    	break;
    	case 1: num1Word= "One";
    	break;
    	case 2: num1Word= "Two";
    	break;
    	case 3: num1Word= "Three";
    	break;
    	case 4: num1Word= "Four";
    	break;
    	case 5: num1Word= "Five";
    	break;
    	case 6: num1Word= "Six";
    	break;
    	case 7: num1Word= "Seven";
    	break;
    	case 8: num1Word= "Eight";
    	break;
    	case 9: num1Word= "Nine";
    	break;
    	default: 
    		System.out.println("Invalid Number");
    	System.exit(0);
    	break;
    	}
    	switch((int)num2){
    	case 0: num2Word= "Zero";
    	break;
    	case 1: num2Word= "One";
    	break;
    	case 2: num2Word= "Two";
    	break;
    	case 3: num2Word= "Three";
    	break;
    	case 4: num2Word= "Four";
    	break;
    	case 5: num2Word= "Five";
    	break;
    	case 6: num2Word= "Six";
    	break;
    	case 7: num2Word= "Seven";
    	break;
    	case 8: num2Word= "Eight";
    	break;
    	case 9: num2Word= "Nine";
    	break;
    	default: 
    		System.out.println("Invalid Number");
    	System.exit(0);
    	break;
    	}
    	System.out.println("Please enter the mathematical symbol for what you would like to do with these numbers. ");
    	tString = scan.next();
    	char operator = tString.charAt(0);
    	
    	
    
    	
    	switch(operator){
    	case '*': answ= num1*num2;
    		System.out.println(num1Word+ " Multiplied by "+num2Word+" is "+formatter.format(answ));
    		break;
    	case '/': if(num2 == 0){
    		System.out.println("You cannot divide by zero, session terminated.");
    		
    	}
    	else{
    		answ= num1/num2;
    		System.out.println(num1Word+ " Divided by "+num2Word+" is "+formatter.format(answ));
    	}
    	break;
    	case '+': answ= num1 + num2;
    	System.out.println(num1Word+ " Added to "+num2Word+" is "+formatter.format(answ));
    	break;
    	case '-': answ= num1 - num2;
    	System.out.println(num1Word+ " Minus "+num2Word+" is "+formatter.format(answ));
    	break;
    	case '^': 
    		answ= Math.pow(num1,num2);
    	System.out.println(num1Word+ " raised to the power of " +num2Word+ " is "+ formatter.format(answ));
    	break;
    	default: System.out.println("Invalid Operator");
    	System.exit(0);
    	break;
    	}
    
    }
    }
    Last edited by Nepomuk; Feb 20 '09, 05:26 AM. Reason: Code belongs in the [CODE] tags, not [QUOTE] tags. ^^
  • horace1
    Recognized Expert Top Contributor
    • Nov 2006
    • 1510

    #2
    you can use method scanner.hasNext Double() to check if the next token can be read as a double and if not ignore it, e.g.
    Code:
    System.out.println("Please enter two numbers between 0 and 9 ");
    while(!scan.hasNextDouble())
       { 
        System.out.printf("error, enter a double !"); 
        scan.nextLine();          // ignore rest of line
       }
    num1= scan.nextDouble();

    Comment

    • bvav22
      New Member
      • Feb 2009
      • 4

      #3
      i really cannot thank you enough, that was such a big help.... :)

      Comment

      Working...