我在代码中使用do,我得到错误

时间:2013-11-05 20:56:53

标签: java

我想编写一个显示菜单的程序,并要求用户从两个选项中进行选择  a)找到奇数:程序要求用户输入整数x,然后将奇数整数从x打印到1 b)查找偶数:程序要求用户输入整数x,然后将偶数整数从x打印到2。 - 您的代码应识别无效字符并显示“无效选择!!”信息。 - 程序应显示消息“你想继续吗?每次计算后y或n“。用户将输入“y”继续,否则用户将输入“n”。我写了这样的代码

import java.util.*;

public class choices{
    //main method
    public static void main(String args[]){
        Scanner input=new Scanner(System.in);
        String op;
        int num;

        String op2;
        String odd="";
        String even="";
        int count=0;

        do{
            System.out.println("a) Find odd numbers");
            System.out.println("b) Find even numbers");
            System.out.print("choose an option [ a, b]: ");
            op=input.next();
            if (op.equals('a'))
                System.out.print("Enter Integer number : ");
            num=input.nextInt();

            for(int i=num ; i >=num-i ;i--){
                if(num%2!=0)
                    odd=odd+""+i;
                System.out.print("odd numbers are : "+odd );
            }

            if (op.equals('b')){
                for(int i=num ; i >=num-i ;i--){
                    if(num%2==0)
                        even=even+""+i;      
                    System.out.print("even numbers are : "+even );
                }
            }
            else
                System.out.println("invalid choice");

            System.out.print("Do you want to continue (y or n)?");
            op2=input.next();  


            if(op2.equals('n')) 
                System.out.println("Bye");
        }

        while(!op2.equals('n'));
        count++;



    }
}

但问题是:它在>之后停止选择一个选项[a,b]:b

a) Find odd numbers
b) Find even numbers
choose an option [ a, b]: b
d
Exception in thread "main" java.util.InputMismatchException
       at java.util.Scanner.throwFor(Scanner.java:909)
       at java.util.Scanner.next(Scanner.java:1530)
       at java.util.Scanner.nextInt(Scanner.java:2160)
       at java.util.Scanner.nextInt(Scanner.java:2119)
       at choices.main(choices.java:30)

3 个答案:

答案 0 :(得分:2)

System.out.print("choose an option [ a, b]: ");
op=input.next();
if (op.equals('a'))
System.out.print("Enter Integer number : ");
num=input.nextInt();

注意你的范围。这可能是错的。你每次都在调用nextInt()。

答案 1 :(得分:0)

你有几个问题。

首先,您需要将大括号中的if语句的代码包装起来。这就是我想你想要的:

if (op.equals('a'))
{
    System.out.print("Enter Integer number : ");
    num=input.nextInt();

    for(int i=num ; i >=num-i ;i--)
    {
        if(num%2!=0)
            odd=odd+""+i;
        System.out.print("odd numbers are : "+odd );
    }
}

其次,'a'是一个字符,所以你的if条件永远不会通过。你需要做op.equals("a")。问题是它正在跳过你的第二个提示,因为if语句失败了,无论出于什么原因你都为"d"提供了input.nextInt(),并且你得到了一个类型错误。

答案 2 :(得分:0)

此行之后的op=input.next();(可以是a或b)接下来是num=input.nextInt();,您不能选择d,因为它不是Int。试着捕捉异常:

boolean stopFlag = false;

do {
...
System.out.print("choose an option [ a, b]: ");
op=input.next();
if (op.equals('a')) { // i think `{` must be here
    System.out.print("Enter Integer number : ");
    try {
       num=input.nextInt();
    } catch (InputMismatchException ex) {
       // this wasn't an int 
       System.out.println("You entered not a correct number.");
       System.out.println("Bye");
       stopFlag = true;
    }
    ///
    for(int i=num ; i >=num-i ;i--){
        if(num%2!=0)
            odd=odd+""+i;
        System.out.print("odd numbers are : "+odd );
    }
} // and `}` here
...
// make the same with `b`
...
while(!stopFlag);