当前位置: 首页 > 知识库问答 >
问题:

如何使用增强的For循环输出数组列表中的奇数

苍宝
2023-03-14

//我需要向用户询问他们想要的列表的大小,然后为他们想要的大小列表生成带有数组列表的随机数,并输出列表。我已经完成了这些步骤,但接下来我必须使用增强的for循环输出列表中的奇数,然后在没有偶数的情况下重新打印列表//

import java.util.Scanner;
import java.util.ArrayList;

public class MyProgram
{
public static void main(String[] args)
{
  Scanner scan = new Scanner(System.in);
  System.out.println("How big would you like your list?");
  int decision = scan.nextInt();
  
  
  
  ArrayList<Integer> Rando = new ArrayList<Integer>();
  for (int i = 1; i <= decision; i++)
  {
      Rando.add((int)(Math.random()*100 + 1));
  }
  System.out.println();
  System.out.println(Rando);
  
  
  
  ArrayList<Integer> evens = Rando;
  for (int i = 0; i < evens.size(); i++)
  {      
    if (evens.get(i)%2 != 0) 
    {
        evens.remove(i);
       
    }    
  }
   
    
ArrayList<Integer> odds = Rando;
  for (int i = 0; i < odds.size(); i++)
  {      
    if (odds.get(i)%2 != 0) 
    {
        evens.remove(i);
    }    
  }
  System.out.println();
  System.out.println(odds);
  
  for(Integer number: Rando)
  {
      System.out.println();
      System.out.println("# of Odd Numbers: "+ odds.size());
      System.out.println();
      break;
  }
 
  System.out.println("List Without Evens: " + evens.remove);
  System.out.println();
  
  
}
  
}

共有1个答案

慕容俭
2023-03-14

你现在这样做的方式,你不会在清单上留下任何东西。

ArrayList<Integer> evens = Rando;
... 
ArrayList<Integer> odds = Rando;

这将修改原始列表。在前两个循环之后,您将不会有任何东西留在列表中,这将删除偶数和奇数。我认为你应该创建一个新的列表。

  ArrayList<Integer> evens = new ArrayList<>();
  for (int i = 0; i < Rando.size(); i++)
  {      
    if (Rando.get(i)%2 == 0) 
    {
        evens.add(i);
       
    }    
  }

现在使用for-each循环变得更容易了。

  ArrayList<Integer> evens = new ArrayList<>();
  for (int x : Rando )
  {      
    if (x%2 == 0) 
    {
        evens.add(x);
       
    }    
  }

请记住,您需要修改现有的循环Rando将完全不包含任何元素,因此每次都必须更改现有代码或重新创建随机数列表。

 类似资料:
  • 问题内容: 我看到了如下一行代码: 就我所知,我认为要能够以这种格式编写for循环,我们需要将“ words”作为实现Iterable接口并覆盖iterator()函数的类的实例。但是’words’是String数组类型,这对于循环格式如何正确? 有人可以给我一些提示吗? 问题答案: 从有关此主题的Java教程中: for-each构造也适用于数组,其中它隐藏索引变量而不是迭代器。以下方法返回in

  • 问题内容: 我正在从Java切换到C ,并且想知道C 是否包含我在Java中使用的增强的for循环,例如: 在C ++中是否可能有相同的“快捷方式”? 问题答案: 在C ++ 11中,如果编译器支持,则可以。这称为基于范围的。 它适用于C样式数组以及具有函数并返回迭代器的任何类型。例:

  • 我正在逐个迭代字符串对象列表中的元素: 在这里,每次我调用list上的get()时,列表都会从其一端一直迭代到第i个元素——因此上面循环的复杂性是O(n^2)。 是a.)对于增强型for循环,与上面相同,还是b.)对于循环,将指针保持在最后一个指针所在的位置,因此下面循环的复杂性是O(n)? 如果上面的情况(b)——我想是这样的——在列表上使用迭代器有什么好处吗。这是简单的迭代--没有回头路 蒂亚

  • 问题内容: 在玩循环的同时创建了以下代码。下面的代码将斐波那契值存储到数组中,然后使用for循环将其打印出来。 上面的代码工作正常。但是,第一次将它们放在一起时,我使用了增强的for循环来打印出值(代码中的第二个for循环)。可以很好地编译,但是运行时得到以下信息: 我不明白出了什么问题。更改第二个循环不应更改值(您会注意到斐波那契值是错误的(即缺少值))。而且我不明白为什么简单的增强型for循环

  • 问题内容: 据我了解,lambda表达式捕获值,而不是变量。例如,以下是编译时错误: 但是,当我尝试使用增强功能运行相同的逻辑时,一切工作正常: 为什么它对于增强型循环而不是常规的常规循环都能很好地工作,尽管增强型循环也像常规循环那样在内部递增变量。** 问题答案: Lambda表达式的工作方式类似于回调。一旦在代码中传递它们,它们就“存储”它们需要操作的任何外部值(或引用)(就像这些值在函数调用

  • 我是Java的初学者,我有这个疑问。是否可以在ArrayList上使用Java中增强的for循环,但从指定的点而不是ArrayList开始[0]。 我可以使用增强的for循环并从calc[2]而不是calc[0]开始迭代吗??如果可能,我该怎么做?在我的特定情况下,使用增强的for循环会更好,而不是普通的for循环。