next、nextInt、nextDouble、nextFloat和nextLine的区别。

next类似于nextInt(只能输入整数)、nextDouble(只能输入双精度浮点数),可以输入任意类型的值。

有几段话对这个的总结比较好,我们先看一下这几段,再总结:

首先,next()一定要读取到有效字符后才可以结束输入,对输入有效字符之前遇到的空格键、Tab键或Enter键等结束符,next()方法会自动将其去掉,只有在输入有效字符之后,next()方法才将其后输入的空格键、Tab键或Enter键等视为分隔符或结束符。简单地说,next()查找并返回来自此扫描器的下一个完整标记。完整标记的前后是与分隔模式匹配的输入信息,所以next方法不能得到带空格的字符串而nextLine()方法的结束符只是Enter键,即nextLine()方法返回的是Enter键之前的所有字符,它是可以得到带空格的字符串的。

 nextInt()方法会读取下一个int型标志的token.但是焦点不会移动到下一行,仍然处在这一行上。当使用nextLine()方法时会读取改行剩余的所有的内容,包括换行符,然后把焦点移动到下一行的开头。所以这样就无法接收到下一行输入的String类型的变量。

next()方法的工作原理:( 肤浅的说) 

       从一行中扫描,直到碰到特定的标识符:空格或是换行符(\n),获取其前的字符(串)。

        看这里,第一个next()方法读入了“ni掌柜”,但并没有读入"\n",也不负责换行,然后就把 "\n"丢给了nextLine()处理,

        你也知道的,nextLine()属于那种“见钱眼开”,看见“\n”就收了,然后扫描了 \n 之前的内容,也就是空字符串。于是出现问题了。

如:

package niuke;
import java.util.*;


public class StringSorting {
public static void main(String[] args){
        Scanner scan = new Scanner(System.in);
        while(scan.hasNext()){
            int number = scan.nextInt();
            String[] str = new String[number];
            for(int i=0;i
                str[i] = scan.nextLine();(若此处为scan.nextLine(),假如由scan.nextInt()输入的number是9,总会只允许输入8次,就开始执行代码,一直搞不清楚问题出现在哪里,后来,发现,当输入9时,scan.nextInt()会跳过从键盘输入的值,假如其下面又有一句代码,则会执行下一句代码。这个问题,代码后面分析。正确的是将此句换为scan.next();即可。)
            }
            Arrays.sort(str);
            for(int j=0;j
                System.out.println(str[j]);
            }
        }
    }
}


由此,我们将对红字部分出现的问题进行分析:首先我们需要弄清nextInt的工作原理:

nextInt表示输入的需要是整数,在输入整数之前,输入的空格、Tab或者\n(换行符)统统忽略掉,一旦输入有效的整数之后,再输入空格、Tab或者\n就会将此字符之前的有效的整数提取出来,光标停留在本行。

nextLine进行输入时,看到\n会直接当作自己的输入,并以\n作为输入结束的标志,所以默认不让用户输入啦,然后把光标移到下一行的开头。

举例说明:

比如我们用scan.nextInt()输入9,输入回车键,此时9\n,会把9赋给number,\n留下,再输入scan.nextLine()时,以\n作为结束符,直接到下一行开头。若再次输入的是scan.next(),就会忽略掉\n,输入122\n,会把122再次赋给另外一个新的变量值。

至此,我们有关next、nextInt等和nextLine的分析结束。

你可能感兴趣的:(next、nextInt、nextDouble、nextFloat和nextLine的区别。)