数组输出中的随机零
random zeroes in array output
我正在尝试获取一个包含 1 到 10 之间的奇数的数组。除了这些随机出现的零之外,一切正常:
[0, 1, 0, 3, 0, 5, 0, 7, 0, 9]
有办法阻止吗?感谢帮助。
public static void main(String[] args) {
int [] array = new int[10];
for (int x = 0; x < array.length; x++) {
if (x % 2 == 0) {
}
else {
array[x] = x;
}
}
System.out.println(Arrays.toString(array));
}
}
您只是在数组 [x] 处填充数组点,因此当它不是素数时,数组位置将保留为 0。
编辑:仅供参考,您的代码找到的是奇数而不是素数。
如果您想解决打印问题,试试这个:
public static void main(String[] args) {
int [] array = new int[10];
boolean isPrime = true; // you haven't used this variable!
for (int x = 0; x < array.length; x++) {
if (x % 2 == 0) {
isPrime = false; // do you really need this block?
}
else {
array[x] = x;
System.out.print(", "+x+""); // print the prim every time you find it.
}
}
//System.out.println(Arrays.toString(array));
}
}
但是,您的代码不是正确查找原始数的方法。
另一方面,要打印仅包含原始数的数组,您可以将每个原始数添加到一个新数组中并打印出该数组。
使用数组列表
int max = 10;
ArrayList<Integer> array = new ArrayList<Integer>();
for (int x = 0; x < max; x++) {
if (x % 2 != 0) {
array.add(x);
}
}
System.out.println(array);
}
输出
[1, 3, 5, 7, 9]
请注意,isPrime 实际上没有做任何事情,它是一个无用的变量
而且Prime搜索逻辑也不全
你似乎 re-using 一个你不应该的变量。你的 for 循环只用它的索引填充数组的奇数槽。
我还推荐一个列表,例如 ArrayList,而不是普通数组。
基本上,我会建议这样的事情:
public static void main(String[] args) {
List<Integer> primeNumbers = new ArrayList<Integer>();
int max = 100;
for (int x = 0; x < max; x++)
{
if (isPrime(x))
{
primeNumbers.add(Integer.valueOf(x));
}
}
for (Integer i : primeNumbers)
{
System.out.print(i.intValue() + ", ");
}
}
private static boolean isPrime(int number)
{
for (int n = 2; n < number; n++)
{
if (number % n == 0)
return false;
}
return true;
}
不知道这个算素数的函数对不对,错了也差不多
素数计算源:http://www.mkyong.com/java/how-to-determine-a-prime-number-in-java/
对于0
和n
之间的数字,将有一半是偶数,一半是奇数,所以你只会找到n / 2
个奇数。您不需要临时变量,只需使用
之类的东西测试 % 2 != 0
final int n = 10;
int[] array = new int[n / 2];
for (int x = 0, pos = 0; x < n; x++) {
if (x % 2 != 0) {
array[pos] = x;
pos++;
}
}
或,在Java 8+,你可以用IntStream.filter
像
int[] array = IntStream.range(0, n).filter(x -> x % 2 != 0).toArray();
1) 你的数组长度需要缩短,1 到 10 之间只有 5 个奇数。 2) Prime 在你的情况下没有用,所以只需在索引中添加任何奇数。
您可以使用 ArrayList,因为它们不允许将任何未填充的索引初始化为 0,但是,数组会将 0 分配给任何未分配值的索引。
int [] array = new int[5];
for(int i=0; i<array.length; i++){
if(x % 2 != 0) {
array[x]=x
}
}
我正在尝试获取一个包含 1 到 10 之间的奇数的数组。除了这些随机出现的零之外,一切正常:
[0, 1, 0, 3, 0, 5, 0, 7, 0, 9]
有办法阻止吗?感谢帮助。
public static void main(String[] args) {
int [] array = new int[10];
for (int x = 0; x < array.length; x++) {
if (x % 2 == 0) {
}
else {
array[x] = x;
}
}
System.out.println(Arrays.toString(array));
}
}
您只是在数组 [x] 处填充数组点,因此当它不是素数时,数组位置将保留为 0。
编辑:仅供参考,您的代码找到的是奇数而不是素数。
如果您想解决打印问题,试试这个:
public static void main(String[] args) {
int [] array = new int[10];
boolean isPrime = true; // you haven't used this variable!
for (int x = 0; x < array.length; x++) {
if (x % 2 == 0) {
isPrime = false; // do you really need this block?
}
else {
array[x] = x;
System.out.print(", "+x+""); // print the prim every time you find it.
}
}
//System.out.println(Arrays.toString(array));
}
}
但是,您的代码不是正确查找原始数的方法。
另一方面,要打印仅包含原始数的数组,您可以将每个原始数添加到一个新数组中并打印出该数组。
使用数组列表
int max = 10;
ArrayList<Integer> array = new ArrayList<Integer>();
for (int x = 0; x < max; x++) {
if (x % 2 != 0) {
array.add(x);
}
}
System.out.println(array);
}
输出
[1, 3, 5, 7, 9]
请注意,isPrime 实际上没有做任何事情,它是一个无用的变量 而且Prime搜索逻辑也不全
你似乎 re-using 一个你不应该的变量。你的 for 循环只用它的索引填充数组的奇数槽。
我还推荐一个列表,例如 ArrayList,而不是普通数组。
基本上,我会建议这样的事情:
public static void main(String[] args) {
List<Integer> primeNumbers = new ArrayList<Integer>();
int max = 100;
for (int x = 0; x < max; x++)
{
if (isPrime(x))
{
primeNumbers.add(Integer.valueOf(x));
}
}
for (Integer i : primeNumbers)
{
System.out.print(i.intValue() + ", ");
}
}
private static boolean isPrime(int number)
{
for (int n = 2; n < number; n++)
{
if (number % n == 0)
return false;
}
return true;
}
不知道这个算素数的函数对不对,错了也差不多
素数计算源:http://www.mkyong.com/java/how-to-determine-a-prime-number-in-java/
对于0
和n
之间的数字,将有一半是偶数,一半是奇数,所以你只会找到n / 2
个奇数。您不需要临时变量,只需使用
% 2 != 0
final int n = 10;
int[] array = new int[n / 2];
for (int x = 0, pos = 0; x < n; x++) {
if (x % 2 != 0) {
array[pos] = x;
pos++;
}
}
或,在Java 8+,你可以用IntStream.filter
像
int[] array = IntStream.range(0, n).filter(x -> x % 2 != 0).toArray();
1) 你的数组长度需要缩短,1 到 10 之间只有 5 个奇数。 2) Prime 在你的情况下没有用,所以只需在索引中添加任何奇数。 您可以使用 ArrayList,因为它们不允许将任何未填充的索引初始化为 0,但是,数组会将 0 分配给任何未分配值的索引。
int [] array = new int[5];
for(int i=0; i<array.length; i++){
if(x % 2 != 0) {
array[x]=x
}
}