java设计整数出现的次数_java语言程序设计基础篇——一维数组(1)

这篇博客介绍了使用Java编程解决整数计数、成绩分析和独特数值显示的问题。通过一维数组实现,包括计算1到100之间整数的出现次数,分析大于或等于平均分的考试成绩数量,以及显示互不相同的数。此外,还讨论了优化素数判断的方法,利用已知素数数组检查新数是否为素数。
摘要由CSDN通过智能技术生成

1.(计算数字的出现次数)编写程序,读取1到100之间的整数,然后计算每个数出现的次数。假定输入是以0结束的。

方法一:不是很常规,将整数直接读取到数组中。

因为样例输出时,是按照数字从小到大的顺序输出的,所以先将数组进行排序;

将第i个位置的数字,与i位置之后的数字依次进行比较,如果相等,则该数字的出现次数在1的基础上加1,紧接着将该位置的数字变成0,下次不会再访问;

循环输出count值

import java.util.Arrays;

import java.util.Scanner;

public class Exercise6_3 {

public static void main(String[] args){

Scanner input = new Scanner(System.in);

System.out.print("Enter the integers between 1 and 100: ");

int[] f = new int[101];

for(int i=0;i100||f[i]<0)

continue;

for(int j=i+1;j1)

System.out.println(f[i]+" occurs "+count+" times");

else

System.out.println(f[i]+" occurs "+count+" time");

}

}

}

52c8d7ef33ee4569b424601178c6764f.png

方法二:设置计数数组counts[],从第0~第99位置分别对应数字1~100出现的次数。最后只选择输出counts[i]不为0的元素值

import java.util.Scanner;

public class Exercise6_3 {

public static void main(String[] args){

Scanner input = new Scanner(System.in);

System.out.print("Enter the integers between 1 and 100: ");

int number = input.nextInt();

int[] counts = new int[101];

while(number!= 0){

if(number<=100 && number>=0)

counts[number-1]++;

number = input.nextInt();

}

for (int i=0;i<100;i++){

if(counts[i]>0)

System.out.println((i+1)+" occurs "+counts[i]+((counts[i] == 1)?" time":" times"));

}

}

}

2.(分析成绩)编写一个程序,读入个数不确定的考试分数,并且判断有多少个分数是大于或等于平均分,多少个分数是低于平均分的。输入一个负数表示输入的结束。假设成绩的最高分为10分。

因为有输入一个负数结束输入的限制,所以依旧采用while循环依次输入考试分数,然后将考试分数在0-10之间包括0和10的数字依次存储进数组中,在存储过程中,记录元素的个数和元素的和,最终求出平均数;

将数组内的元素依次与平均数进行比较,大于等于平均数的,使count1加1,小于的使count2加1,最后输出结果

import java.util.Scanner;

public class Exercise6_4 {

public static void main(String[] args){

Scanner input = new Scanner(System.in);

double[] f = new double[10000001];

double sum=0;

int count=0;

System.out.print("Enter the goals between 0 and 10: ");

double number = input.nextDouble();

while(number>=0){

if(number<=10){

f[count]=number;

count++;

sum+=number;

}

number = input.nextDouble();

}

double ave = sum/count;

System.out.println("The average of goals is "+ave);

int count1=0;

int count2=0;

for(int i=0;i= ave)

count1++;

else

count2++;

}

System.out.println("The number of goals higher than(or equal to) average is "+count1);

System.out.println("The numbre of goals lower than average is "+count2);

}

}

5968dd82e8de4a6fae239bcc2be6a9a9.png

方法2:因为题目中未明确读入分数的个数,所以申请较大的数组会浪费空间资源,申请较小的数组会发生越界,所以较好的办法应该是使用ArrayList建立动态数组,根据需要分配空间。

import java.util.Scanner;

import java.util.ArrayList;

import java.util.List;

public class E6_4 {

public static void main(String[] args) {

// TODO 自动生成的方法存根

ArrayList list = new ArrayList();

Scanner input = new Scanner(System.in);

int score = input.nextInt();

while (score >= 0) {

list.add(score);

score = input.nextInt();

}

Integer[] array = (Integer[]) list.toArray(new Integer[list.size()]);//能正确运行

double scores = 0;

for(int element:array){

scores += element; //1 for(元素类型t 元素变量x : 遍历对象obj){

//2 引用了x的java语句;

}

scores = scores / list.size();

int i = 0 , j = 0;

for (int element:array) {

if (element < scores) {

i++;

}

else j++;

}

System.out.println("平均分: " + scores);

System.out.println("低于平均分的: " + i);

System.out.print("高于平均分的: " + j);

}

}

3.(打印不同的数)编写一个程序,读入10个数并且显示互不相同的数(即一个数出现多次,但仅显示一次)。提示,读入一个数,如果它是一个新数,则将它存储在数组中。如果该数已经在数组中,则忽略它。输入之后,数组包含的都是不同的数。

该题的关键在于通过循环判断输入的数字是否存在于数组中(关键在于count值的使用)

在判断过程中,如果出现数字和某一位置的元素相等,则立马结束循环,此时的j值肯定小于count值;

如果z直到循环结束都没有找到与之相等的元素,此时的j值肯定为count,则可以将该数字存进数组中,count值进行加1;

其实这种方法有些难想,比较常规的就是设置一个标志,如果出现数字与元素相等,则该标志变为false,显然,最后只需要观察标志位的值是true还是false就可以知道该数字需不需要存进去。

import java.util.Scanner;

public class Exercise6_5 {

public static void main(String[] args){

Scanner input = new Scanner(System.in);

int[] f = new int[10];

System.out.print("Enter ten numbers: ");

int count=0;

for(int i=1;i<10;i++){

int number = input.nextInt();

int j;

for(j=0;j

3706d181c6664437b3e5a69542836767.jpg

4.(修改程序清单4-14)程序清单4-14通过检验2,3,4,5,6,......,n/2是否是数n的因子来判断n是否是素数。如果找到一个因子,n就不是素数。判断n是否是素数的另一个更有效的方法是:检验小于等于根号下n的素数是否都能整除n。如果不能,则n就是素数,然后再检查它们是否是n的可能的因子。

下面是程序清单4-14的代码实现:

public class PrimeNumber {

public static void main(String[] args){

final int NUMBER_OF_PRIMES = 50;

final int NUMBER_OF_PRIMES_PER_LINE = 10;

int count = 0;

int number = 2;

System.out.println("The first 50 prime numbers are \n");

while(count < NUMBER_OF_PRIMES){

boolean isPrime = true;

for(int divisor = 2;divisor <= number/2;divisor++){

if(number % divisor == 0){

isPrime = false;

break;

}

}

if(isPrime){

count++;

if(count % NUMBER_OF_PRIMES_PER_LINE == 0){

System.out.println(number);

}else

System.out.print(number + " ");

}

number++;

}

}

}

改写的程序:按照红色部分的要求进行改写就可以,这个时候需要建一个存储素数的数组,用已经判断出是素数的数组元素去判断新的数是否是素数。

public class Exercise6_6 {

public static void main(String[] args){

final int NUM_OF_PRIMES = 50;

int count=0;

int number=2;

int[] primeNum = new int[NUM_OF_PRIMES];

System.out.println("The first 50 prime numbers are \n");

while(count

2817bc78717746f9b969175d33ffb85f.png

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值