为什么我要创建一个新的扫描仪?在创建驱动程序时

时间:2015-07-12 17:23:02

标签: java java.util.scanner

正如您所看到的,这是我正在处理的代码片段。我的问题是为什么我必须创建一个新的扫描仪才能输入?为什么我不能使用stdIn.nextLine();代替?如果你能包含一些参考文献,我将非常感激。

import java.util.Scanner;

public class Week6{

    public static void main(String[]args){
    Horse horse1;
    Horse horse2;
    Horse horse3;
    String name;
    int age;
    double height;
    String color;
    boolean pureBlood;
    Scanner in = new Scanner(System.in);

    horse1 = new Horse(); // creation of Horse1
    horse2 = new Horse(); // creation of horse2
    horse3 = new Horse(); // creation of horse3

    System.out.print("Enter the name of Horse1: ");
    name = in.nextLine();

    horse1.setName(name); //setting name for horse1

    System.out.println(horse1.getName());



    } // end main
} // end class

3 个答案:

答案 0 :(得分:4)

检查java.lang.Systemjava.io.InputStreamjava.io.Scanner的javadoc。

System.inInputStream。因此,您可以使用InputStream方法从中访问非常基本的数据。

当您创建新的Scanner时,您将InputStream包装在另一个类中,它提供了更高级/更舒适的方法,例如readLinenextLine InputStream的定义中没有。

如果它有助于可视化我的意思,请认为您的Scanner变量可能有任何不同的名称,因此没有直接的关系。简而言之,您不是在创建“另一个”Scanner,因为在您的代码中只有一个Scanner实例(您创建的实例)。

答案 1 :(得分:3)

你不能使用stdIn,因为java既没有那个对象,也没有你创建过。 当您编写myString.nextline()时,您正在调用对象myString(所有字符串都是对象,例如:String myString = new String(“Hello World!”)),但如果您调用stdIn它将显示错误。

我没有找到任何可以使用stdIn的java库,但是stdIn适用于PHP,Python和C,所以也许你因此而感到困惑。

答案 2 :(得分:1)

我们正在使用Scanner类从user获取输入。我们首先创建一个Scanner类的对象,然后我们使用Scanner类的方法.Scanner类存在于java.util包中,所以我们在程序中导入这个包 例如:

  

扫描仪a =新扫描仪(System.in);

使用以下Scanner类方法

1)nextInt输入一个整数

2)nextFloat输入一个浮点数

3)nextLine输入字符串

void TypingMessageFromCodePage(TCHAR* Message, UINT CodePage=0)
{
    TCHAR Word[2];
    TCHAR WordCode[64];
    char MultiByte[64];

    static const BYTE NumCode[10]={0x2D, 0x23, 0x28, 0x22, 0x25, 0x0C, 0x27, 0x24, 0x26, 0x21};
    int Length = wcslen(Message);

    for(int i=0; i<Length; i++)
    {
        Word[0] = Message[i];
        Word[1] = L'\0';

        WideCharToMultiByte(CodePage, 0, Word, -1, MultiByte, 64, NULL, NULL);
        _itow((int)(((~MultiByte[0])^0xff)<<8)+((~MultiByte[1])^0xff), WordCode, 10);

        keybd_event(VK_MENU, MapVirtualKey(VK_MENU, 0), 0, 0);

        for(int j=0; j<wcslen(WordCode); j++)
        {
            keybd_event(NumCode[(int)WordCode[j]-48], MapVirtualKey(NumCode[(int)WordCode[j]-48], 0), 0, 0);
            keybd_event(NumCode[(int)WordCode[j]-48], MapVirtualKey(NumCode[(int)WordCode[j]-48], 0), KEYEVENTF_KEYUP, 0);
        }
        keybd_event(VK_MENU, MapVirtualKey(VK_MENU, 0), KEYEVENTF_KEYUP, 0);
    }
}

希望!这有助于你...