不同类型输入的不同Java扫描器

wkftcu5l  于 2023-06-28  发布在  Java
关注(0)|答案(7)|浏览(125)

想象一下下面的scanario:我有一个程序,要求输入一个整数,然后输入一个字符串。

int age=0;
String name;
Scanner sc = new Scanner(System.in);

System.out.print("Enter Age: ");
age = sc.nextInt();
System.out.print("Enter Name: ");
name= sc.nextLine();

有了aobe代码,我没有机会输入名字。所以通常我会声明2个scanner对象如下:

int age=0;
String name;
Scanner sc = new Scanner(System.in);
Scanner sc2 = new Scanner(System.in);    //2nd Scanner object

System.out.print("Enter Age: ");
age = sc.nextInt();
System.out.print("Enter Name: ");
name= sc2.nextLine();                    //Using 2nd Scanner Object

**我的问题是:**是否需要声明多个scanner对象来接受不同类型的输入??我做的正确吗?

这个问题我已经想了很多年了。(SO中的几个问题提到了多个扫描仪,但他们的问题只使用了一个扫描仪对象,所以我今天问这个问题。

vnjpjtjt

vnjpjtjt1#

@skiwi关于只使用一个Scanner是正确的,所以你这样做是正确的。它不起作用的原因是nextInt()消耗构成整数的所有字符,但它不接触行尾字符。因此,当调用nextLine()时,它看到行尾字符之前没有字符,因此它认为输入了一个空行,并返回一个空String。但是,nextLine()确实会使用行尾字符,因此如果在执行name = sc.nextLine();之前调用sc.nextLine();一次,它应该可以工作。

nxowjjhe

nxowjjhe2#

您没有机会输入名称,因为nextInt()不会读取换行符'\n'(由用户在按Enter键后输入),而nextLine()会。所以只要你调用name = sc.nextLine();,它就会读取nextInt()还没有读取的'\n'字符。
绝对不要创建一个新的扫描仪,如果扫描仪,如果你扫描同样的东西(如System.in)-只有改变扫描仪,如果你扫描别的东西,如不同的文件或东西。
要使代码正常工作(只有一个Scanner示例),请使用以下命令:

int age = 0;
String name;
Scanner sc = new Scanner(System.in);

System.out.print("Enter Age: ");
age = sc.nextInt();
System.out.print("Enter Name: ");

sc.nextLine(); // "dispose" of the '\n' character
               // so that it is not recorded by the next line

name = sc.nextLine();

// print your findings
System.out.println("------\nAge: " + age + "\nName: " + name);

输入/输出示例:

Enter Age: 17
Enter Name: Michael
------
Age: 17
Name: Michael
aydmsdu9

aydmsdu93#

对于要扫描的每个对象,您只能使用一个Scanner示例。在这种情况下,您正在从System.in阅读,因此在同一台扫描仪上同时打开两台扫描仪甚至没有意义。
所以你肯定想用你的第一个选择,那么问题来了,它有什么问题:
你需要sc.nextInt(),一个整数,名字很少是整数。您最有可能查找的是一个单词的name = sc.next()或整个句子的name = sc.nextLine()(直到按下回车键)。
还要注意,在sc.nextInt()之后,实际上在任何sc.next***()之后,您需要**按Enter。

noj0wjuj

noj0wjuj4#

您还可以用途:

name = sc.next();
tyg4sfes

tyg4sfes5#

这必须完美地工作。我测试过了。

int age=0;
String name;
Scanner sc = new Scanner(System.in);

System.out.print("Enter Age: ");
age = sc.nextInt();
System.out.print("Enter Name: ");
name= sc.nextLine();
rjjhvcjd

rjjhvcjd6#

为什么这个代码不工作?

package Programs;
import java.util.Scanner;
public class LibraryManagement {
    Scanner s = new Scanner(System.in);
    String Sname, Bname, Bauthor;
    int Sid,Sclass,Bid;
    void StudInfo()
    {
    
    System.out.print("Enter the Student Id: ");
    Sid=s.nextInt();
    
    System.out.print("Enter the Student name: ");
    Sname=s.nextLine();
    
    System.out.print("Enter the Student Class: ");
    Sclass=s.nextInt();
    
    System.out.println("Student detail is saved:  \n Id : "+ Sid + " Name : "+ Sname+ " Class : ");
    
    }
    public static void main(String[] args) {
          LibraryManagement obj= new LibraryManagement();
          obj.StudInfo();
        }
    
    }

输出为:
输入学生ID:10
输入学生姓名:进入学生班级:

avkwfej4

avkwfej47#

    • 你可以通过进一步的例子来理解。不能声明一个扫描器类来接受不同数据类型的输入。因此,在Java中获取输入时要具体。如果你要接受多个字符串输入,那么为它创建一个特定的扫描器类,如果你要为int接受多个输入,那么为它创建一个特定的扫描器类&这取决于不同的数据类型&如果你想接受char输入,那么也为它创建一个特定的扫描器类。这将帮助我们减少编写更多的代码,所以如果你需要10个int输入,然后为它创建一个特定的扫描器类,并将这些单个扫描器类名用于10个输入,基本上它将减少我们为每个int输入编写9行代码,如果你要输入10个字符串,那么为它创建一个特定的scanner类&如果你要输入10个字符,那么为它创建一个特定的扫描器类等等…………:)这将减少为每种类型的输入编写代码。**
    • 编码**
import java.util.*;
    import java.lang.*;
    import java.io.*;

    public class arraylistExample {
        public static void main(String[]args){
            // This is a common scanner class for string type of inputs 
            Scanner stringcommonforall=new Scanner(System.in);
            // This is a common scanner class for integer type of inputs 
            Scanner intcommonforall=new Scanner(System.in);
            int size;
            int pos=0;
            boolean findornot=false;
            String found;
            ArrayList<String> name=new ArrayList<String>();
            System.out.print("Enter the size of the ArrayList >> ");
            size=intcommonforall.nextInt();
            // when your are using one scanner for all types of input then you will get the error 
            for(int i=0;i<size;i++){
                System.out.print(">> ");
                name.add(stringcommonforall.nextLine());
            }
            System.out.print("Enter the element you want to search inside the arraylist >> ");
            found=stringcommonforall.nextLine();
            for(String i:name){
                if(i.equals(found)){
                    findornot=true;
                    pos=name.indexOf(found);
                    break;
                }
            }
            if(findornot==true){
                System.out.println("The elements inside he arraylist >> "+name);
                System.out.println("The element >> "+found+" is found at the positioin >> "+pos);
            }
            else{
                System.out.println("The elements inside he arraylist >> "+name);
                System.out.println("The element >> "+found+" is not found inside the arraylist ");
            }
        }
    }
    • 输出**
Enter the size of the arraylist >> 5
    >> lorem ipsum
    >> xyz
    >> zyx 1
    >> june
    >> done
    Enter the element you want to search inside the arraylist >> done
    The elements inside he arraylist >> [lorem ipsum, xyz, zyx 1, june, done]
    The element >> done is found at the positioin >> 4

相关问题