1

这段代码没问题并且运行良好。

public static void main(String[] args) {
    String [] keywords={"auto","break","case","char","const","continue","default",
            "do","double","else","enum","extern","float","for","goto","if","int",
            "long","register","return","short","signed","sizeof","static","struct",
            "switch","typedef","union","unsigned","void","volatile","while" };
    Scanner sn = new Scanner (System.in);
     if(Arrays.asList(keywords).contains(sn.next())) {
            System.out.println("This is a KEYWORD");
        }

但是当我添加这个

else if(sn.hasNextInt()){
         System.out.println("This is an INTEGER");
     }

并运行,我的输入扫描仪没有停止,为此,我没有得到任何结果。为什么会这样?

请给我一个带有描述的解决方案。先感谢您。

4

3 回答 3

1
import java.util.Arrays;
import java.util.Scanner;


public class jh {

    public static void main(String[] args) {
        String [] keywords={"auto","break","case","char","const","continue","default",
                "do","double","else","enum","extern","float","for","goto","if","int",
                "long","register","return","short","signed","sizeof","static","struct",
                "switch","typedef","union","unsigned","void","volatile","while" };
        Scanner sn = new Scanner (System.in);
        /* get the value from scanner.. do not scan a single input twice.
         In your code in line Arrays.asList(keywords).contains(sn.next())) {, you have 
         already got the input once. If you had tried entering another integer after that and you
         should have got the This is an INTEGER
        */
        String string = sn.next();
        Integer someInt = null;
        try{//see if the input was an integer 
         someInt= Integer.parseInt(string);
        }catch(NumberFormatException e){System.out.println(e);}

         if(Arrays.asList(keywords).contains(string)) {
                System.out.println("This is a KEYWORD");
            }
         else if(someInt!=null){
             System.out.println("This is an INTEGER");
         }

}
}
于 2013-10-03T04:53:07.733 回答
0
/**
 *
 * @author hjayamanna001
 */
import java.io.*;
import java.util.Arrays;
import java.util.Scanner;

public class JavaApplication1 {

    public static void main(String[] args) throws IOException {

        String[] keywords = {"auto", "break", "case", "char", "const", "continue", "default",
            "do", "double", "else", "enum", "extern", "float", "for", "goto", "if", "int",
            "long", "register", "return", "short", "signed", "sizeof", "static", "struct",
            "switch", "typedef", "union", "unsigned", "void", "volatile", "while"};
        String s = "";
        int i = 0;
        while (true) {
            System.out.println("--------------------");
            System.out.println("Input a character:  ");
            Scanner sn = new Scanner(System.in);
            s = sn.next();
            try {
                if (Arrays.asList(keywords).contains(s)) {
                    System.out.println("This is a KEYWORD");

                } else {
                    i = Integer.parseInt(s);
                    System.out.println("This is an INTEGER");
                }
            } catch (Exception e) {
                System.out.println("This is not MATCHING");
            }
        }
    }
}
于 2013-10-03T05:31:42.133 回答
0

我不同意Mr.Vihar1903 ... bcoz这个问题不仅仅是因为hasNext() ...它是bcoz第一个输入总是转到这一行 if(Arrays.asList(keywords).contains(sn.next()) ) { 然后下一个输入有下一个.....最好将您的第一个控制台输入存储在字符串变量中,例如 String str=sc.next(); 之后就可以比较了…………

于 2013-10-03T05:19:42.213 回答