用Java扫描程序扫描奇偶数

用Java扫描程序扫描奇偶数,java,java.util.scanner,Java,Java.util.scanner,我尝试只将偶数添加到ArrayList。我认为使用扫描仪处理文件是最合适的工具。应在控制台中写入文件的路径。我还使用了两种最流行的方法来定义偶数。 问题是-我的ArrayList中不仅添加了偶数。 这是我的代码: BufferedReader bfReader = new BufferedReader(new InputStreamReader(System.in)); InputStream inputStream = null; List<Integer> myInts = ne

我尝试只将偶数添加到
ArrayList
。我认为使用扫描仪处理文件是最合适的工具。应在控制台中写入文件的路径。我还使用了两种最流行的方法来定义偶数。 问题是-我的
ArrayList
中不仅添加了偶数。 这是我的代码:

BufferedReader bfReader = new BufferedReader(new InputStreamReader(System.in));
InputStream inputStream = null;
List<Integer> myInts = new ArrayList<Integer>();

String filePath = null;
try {
  filePath = bfReader.readLine();
  inputStream = new FileInputStream(filePath);
} catch (IOException e) { }

Scanner scanner = new Scanner(inputStream);
while (scanner.hasNext()) {
  if ((scanner.nextInt() % 2) == 0 && scanner.nextInt() != 1) 
    myInts.add(scanner.nextInt());
  // if ((scanner.nextInt() & 1) == 0)
  //   myInts.add(scanner.nextInt());
}

for (Integer x : myInts) {
  System.out.println(x);
}
BufferedReader bfReader=新的BufferedReader(新的InputStreamReader(System.in));
InputStream InputStream=null;
List myInts=new ArrayList();
字符串filePath=null;
试一试{
filePath=bfReader.readLine();
inputStream=新文件inputStream(文件路径);
}捕获(IOE){}
扫描仪=新扫描仪(inputStream);
while(scanner.hasNext()){
if((scanner.nextInt()%2)==0&&scanner.nextInt()!=1)
添加(scanner.nextInt());
//if((scanner.nextInt()&1)==0)
//添加(scanner.nextInt());
}
用于(整数x:myInts){
系统输出println(x);
}
我想我误解了
扫描仪


很高兴收到任何答复

原因是每次调用
nextInt()
都会从输入中读取新的整数

下面是一个经过修改的代码段,说明了您可能希望尝试的内容:

Scanner scanner = new Scanner(inputStream);
int myInt;

while (scanner.hasNext()) {
  myInt = scanner.nextInt();

  if ((myInt % 2) == 0 && myInt != 1) 
    myInts.add(myInt);
}

有关更多信息,请查看。

原因是每次调用
nextInt()
都会从输入中读取新整数

下面是一个经过修改的代码段,说明了您可能希望尝试的内容:

Scanner scanner = new Scanner(inputStream);
int myInt;

while (scanner.hasNext()) {
  myInt = scanner.nextInt();

  if ((myInt % 2) == 0 && myInt != 1) 
    myInts.add(myInt);
}

有关更多信息,请查看。

每当您调用
nextInt
,它都会从扫描仪中取出一个项目。这意味着一次通过循环将删除多达三个项目,并且添加的项目与正在进行检查的项目不同

假设您的输入是
4 3 1

您的代码将执行以下操作:

if ((scanner.nextInt() /* 4 */ % 2) == 0 && scanner.nextInt() /* 3 */ != 1) 
    myInts.add(scanner.nextInt() /* 1 */);
并将
1
添加到您的列表中

您应该将代码更改为:

while (scanner.hasNext())
{
    int value = scanner.nextInt();
    if ((value % 2) == 0) 
        myInts.add(value);
}

这将只读取一个值,并在所有比较中使用它。

每次调用
nextInt
,它都会从扫描仪中取出一个项目。这意味着一次通过循环将删除多达三个项目,并且添加的项目与正在进行检查的项目不同

假设您的输入是
4 3 1

您的代码将执行以下操作:

if ((scanner.nextInt() /* 4 */ % 2) == 0 && scanner.nextInt() /* 3 */ != 1) 
    myInts.add(scanner.nextInt() /* 1 */);
并将
1
添加到您的列表中

您应该将代码更改为:

while (scanner.hasNext())
{
    int value = scanner.nextInt();
    if ((value % 2) == 0) 
        myInts.add(value);
}

这将只读取一个值,并在所有比较中使用它。

每次调用
scanner.nextInt()
时,您都会得到另一个号码。如果要多次引用同一数字,请指定一个变量

此外,在检查了一个数字是否为偶数后,您也不必检查它是否不是数字1

while (scanner.hasNext()) {
    int n = scanner.nextInt();
    if (n%2 == 0) {
        myInts.add(n);
    }
}

每次你打电话给scanner.nextInt()
你都会得到另一个号码。如果要多次引用同一数字,请指定一个变量

此外,在检查了一个数字是否为偶数后,您也不必检查它是否不是数字1

while (scanner.hasNext()) {
    int n = scanner.nextInt();
    if (n%2 == 0) {
        myInts.add(n);
    }
}

这里的问题在于

if ((scanner.nextInt() % 2) == 0 && scanner.nextInt() != 1) 

每次调用
scanner.nextInt()
,都会使用下一个输入。因此,您最终会丢弃大部分输入。要解决这个问题,您需要

    while (scanner.hasNext())
    {
        int i = scanner.nextInt;
        if ((i % 2) == 0 && i != 1) 
            myInts.add(i);
    }
这将正确地消耗输入,并且应该正常工作。
包含此信息的扫描仪javadoc位于此处:

此处的问题在于

if ((scanner.nextInt() % 2) == 0 && scanner.nextInt() != 1) 

每次调用
scanner.nextInt()
,都会使用下一个输入。因此,您最终会丢弃大部分输入。要解决这个问题,您需要

    while (scanner.hasNext())
    {
        int i = scanner.nextInt;
        if ((i % 2) == 0 && i != 1) 
            myInts.add(i);
    }
这将正确地消耗输入,并且应该正常工作。 包含此信息的扫描仪javadoc位于以下位置:

行中

if ((scanner.nextInt() % 2) == 0 && scanner.nextInt() != 1)
从输入中读取两个整数,而不是检查同一个整数两次:

int nextInt = scanner.nextInt();
if ((nextInt % 2) == 0 && nextInt != 1)
排队

if ((scanner.nextInt() % 2) == 0 && scanner.nextInt() != 1)
从输入中读取两个整数,而不是检查同一个整数两次:

int nextInt = scanner.nextInt();
if ((nextInt % 2) == 0 && nextInt != 1)

是的,我想你理解错了。每当使用scanner类指针的nextInt()方法时,哪个扫描文件将移动到nextInt()。所以最好将整数值保存在临时变量中。下面是对代码的修改

BufferedReader bfReader = new BufferedReader(new InputStreamReader(System.in));
    InputStream inputStream = null;
    List<Integer> myInts = new ArrayList<Integer>();

    String filePath = null;
    try
    {
        filePath = bfReader.readLine();
        inputStream = new FileInputStream(filePath);
    }
    catch (IOException e)
    {
    }

    Scanner scanner = new Scanner(inputStream);
    while (scanner.hasNext())
    {
        int firstNumber = scanner.nextInt();

        if ((firstNumber % 2) == 0 && firstNumber != 1) 
            myInts.add(firstNumber);
      //if ((scanner.nextInt() & 1) == 0)
      //    myInts.add(scanner.nextInt());
    }
    for (Integer x : myInts)
    {
        System.out.println(x);
    }
BufferedReader bfReader=新的BufferedReader(新的InputStreamReader(System.in));
InputStream InputStream=null;
List myInts=new ArrayList();
字符串filePath=null;
尝试
{
filePath=bfReader.readLine();
inputStream=新文件inputStream(文件路径);
}
捕获(IOE异常)
{
}
扫描仪=新扫描仪(inputStream);
while(scanner.hasNext())
{
int firstNumber=scanner.nextInt();
如果((firstNumber%2)==0&&firstNumber!=1)
myInts.add(第一个数字);
//if((scanner.nextInt()&1)==0)
//添加(scanner.nextInt());
}
用于(整数x:myInts)
{
系统输出println(x);
}

是的,我想你理解错了。每当使用scanner类指针的nextInt()方法时,哪个扫描文件将移动到nextInt()。所以最好将整数值保存在临时变量中。下面是对代码的修改

BufferedReader bfReader = new BufferedReader(new InputStreamReader(System.in));
    InputStream inputStream = null;
    List<Integer> myInts = new ArrayList<Integer>();

    String filePath = null;
    try
    {
        filePath = bfReader.readLine();
        inputStream = new FileInputStream(filePath);
    }
    catch (IOException e)
    {
    }

    Scanner scanner = new Scanner(inputStream);
    while (scanner.hasNext())
    {
        int firstNumber = scanner.nextInt();

        if ((firstNumber % 2) == 0 && firstNumber != 1) 
            myInts.add(firstNumber);
      //if ((scanner.nextInt() & 1) == 0)
      //    myInts.add(scanner.nextInt());
    }
    for (Integer x : myInts)
    {
        System.out.println(x);
    }
BufferedReader bfReader=新的BufferedReader(新的InputStreamReader(System.in));
InputStream InputStream=null;
List myInts=new ArrayList();
字符串filePath=null;
尝试
{
filePath=bfReader.readLine();
inputStream=新文件inputStream(文件路径);
}
捕获(IOE异常)
{
}
扫描仪=新扫描仪(inputStream);
while(scanner.hasNext())
{
int firstNumber=scanner.nextInt();
如果((firstNumber%2)==0&&firstNumber!=1)
myInts.add(第一个数字);
//if((scanner.nextInt()&1)==0)
//添加(scanner.nextInt());
}
用于(整数x:myInts)
{
系统输出