.懂JAVA的帮个忙。case k k可以是表达式么。比如: int a=500;

.懂JAVA的帮个忙。case k k可以是表达式么。比如: int a=500;,第1张

importjavautilScanner;classddw{publicstaticvoidmain(String[]args){intnum=1;interr=0;intright=0;while(num<=5){javautilRandomrnd=newjavautilRandom();intanum=rndnextInt(100);intanum2=rndnextInt(100);inttotal,answer;total=anum+anum2;Scannerin=newScanner(Systemin);Systemoutprintln("Question:"+"("+anum+")"+"+"+"("+anum2+")"+"=");answer=innextInt();if(total==answer){Systemoutprintln("congratulation");++right;}else{Systemoutprintln("incorrect,theansweris"+total);++err;}++num;}Systemoutprintln("正确:"+right+",错误:"+err+",准确率:"+100right/num+"%");}}

public int check(int start,int end,int[] a){
int i = 0;
for(int check : a){
if(a>start && a<end){
i++;
}
}
return i;
}

集合分组统计处理, 实现的方法很多,简单的写几种方法供参考;(理解后,自行扩展完善)

方法一:(Java8流处理粗略版) 该版本存在的问题:有些区间没有数据,就不打印显示该区间

import javautil;
import javautilstream;
public class NumberDemo {
public static void main(String[] args) {

ArrayList<Integer> list = new ArrayList<Integer>();
int numbers = 10;// 集合里数字的个数
int space = 1000;// 区间的间隔
// 给集合里添加数字
Random rd = new Random();
for (int i = 0; i < numbers; i++) {
listadd(rdnextInt(5000)); // 集合里每个数字的范围是0~4999
}
funStream(list, space);
}
private static void funStream(ArrayList<Integer> list, int space) {
// 使用流处理 把 数字分组
Map<String, List<Integer>> map = liststream()collect(CollectorsgroupingBy((num) -> {
return "区间:[" + num / space  space + "," + (num / space + 1)  space + ")";// 分组规则
}));
mapforEach((k,v)->{
Systemoutprintln(k);
Systemoutprintln("\t"+vsize()+"个数据");
});
}
}

方法二:(Java8流处理详细版) 就算有的区间是0个数据,照样打印出来

import javautil;
import javautilstream;
public class NumberDemo2 {
public static void main(String[] args) {
ArrayList<Integer> list = new ArrayList<Integer>();
int numbers = 10;// 集合里数字的个数
int space = 1000;// 区间的间隔
// 给集合里添加数字
Random rd = new Random();
for (int i = 0; i < numbers; i++) {
listadd(rdnextInt(5000)); // 集合里每个数字的范围是0~4999
}
funStream(list, space);
}
private static void funStream(ArrayList<Integer> list, int space) {
// 使用流处理 把 数字分组
Map<Integer, List<Integer>> map = liststream()collect(CollectorsgroupingBy((num) -> {
return num / space;// 分组规则
}));

// 获取集合里的最大值
Optional<Integer> maxop = liststream()collect(CollectorsmaxBy(Integer::compareTo));
int max = maxoporElse(0);
// 计算出区间的数量
int groups = max % space == 0  max / space : max / space + 1;
// 打印结果
for (int i = 0; i < groups; i++) {
Systemoutprintln("区间:[" + i  space + "," + (i + 1)  space + ")");
Systemoutprintln("\t有" + (mapget(i)==null0:mapget(i)size()) + "个数据");
// Systemoutprintln("\t"+mapget(i));//把数据打印出来
}
}
}

方法三:(比较传统的方法)

import javautil;
public class NumberDemo3 {
public static void main(String[] args) {
ArrayList<Integer> list = new ArrayList<Integer>();
int numbers = 10;// 集合里数字的个数
int space = 1000;// 区间的间隔
//给集合里添加数字
Random rd = new Random();
for (int i = 0; i < numbers; i++) {
listadd(rdnextInt(5000)); // 集合里每个数字的范围是0~4999
}

fun(list,space);
}
private static void fun(ArrayList<Integer> list, int space) {
Collectionssort(list);//排序
int max= listget(listsize()-1);//取得最大值
int groups = max % space == 0  max / space : max / space + 1;//取得区间的数量
HashMap<Integer,ArrayList<Integer>> map=new HashMap<Integer, ArrayList<Integer>>();//存区间和该区间的数字
for (int i = 0; i < groups; i++) {
mapput(i, new ArrayList<>());
}
//把元素添加到指定的区间
for (int i = 0; i < listsize(); i++) {
mapget(listget(i)/space)add(listget(i));
}
//打印结果
for (int i = 0; i < groups; i++) {
Systemoutprintln("区间:[" + i  space + "," + (i + 1)  space + ")");
Systemoutprintln("\t有"+ mapget(i)size()+"个数据");
//Systemoutprintln("\t"+mapget(i));//把数据打印出来
}
}
}

测试效果如下

区间:[0,1000)
有5个数据
区间:[1000,2000)
有0个数据
区间:[2000,3000)
有1个数据
区间:[3000,4000)
有2个数据
区间:[4000,5000)
有2个数据

首先我认为你需要一个区间之间的合并 *** 作,假设你有一个区间类,成员变量有上限和下限,为这个区间类增加一个合并函数,比如(1,5)和(2,4)就合并为(1,5),如果是(1,5)和(2,6)就合并为(1,6)。
当然这里涉及一个不能合并的区间,也就说,这个合并函数具有返回值boolean,返回值表示能否成功合并,不能要返回false。
然后,算法的输入肯定是一个区间数组,数组里是所有的区间。在算法中维护一个新数组,这个数组把能合并的区间都合并在一起,新数组中要保证任意两个区间都是不能合并的,也就是说,遍历输入的数组的每一个区间,在新数组中寻找一个可以合并的区间,如果找不到,则在新数组中单独占一个位置,在每进行一次成功的合并之后,都要搜索新数组,保证新数组的不可合并性。
最后,当搜索输入数组完毕,新数组也建立成功后,再分别计算每个新数组中区间的间断值再求和就是结果了。

使用switch……case
switch(变量){
case 变量值:
执行语句;
break;
case 变量值:
执行语句;
break;
…………
default:
break;
}
其中变量的数据类型可以是:char byte short int 枚举 String(17以后)
case 条件: 此处条件是变量的值,不能是一个范围
break可以有可以没有,若没有就会发生case穿透(从符合条件处一直执行到break或者语句末尾)
default可以有可以没有,并且它的位置是灵活的。
注意:只有当变量的值不符合case所有条件或者default在语句的末尾且case中有没有break的语句,才会执行到default。

int array[] = {1,2,101,220,1100,2300,1,10,230,220,2,1100};
int arr2[]=null; //用数组存储array数组元素在各个区间个数
int max=0;//初始化最大值;

//循环把数组最大值找出来
for (int i = 0; i < arraylength; i++) {
if(array[i]>max){
max=array[i];
}
}
Systemoutprintln("max:"+max);
//计算区间个数,如何最大值不能整除100 要增加一个区间
if(max%100!=0){
arr2=new int[(max/100+1)];
}else{
arr2=new int[(max/100)];
}

//循环array数组元素
for (int i = 0; i < arraylength; i++) {
//循环arr2数组
for (int j = 0; j < arr2length; j++) {
//判断array数组元素 在那个区间段
if(array[i]>=j100+1 && array[i]<=(j+1)100 ){
arr2[j]++;
}
}
}

for (int i = 0; i < arr2length; i++) {
if(i==max/100){
Systemoutprintln("["+((i100)+1)+"-"+(max)+"]:"+arr2[i]);
}else{
Systemoutprintln("["+((i100)+1)+"-"+((i+1)100)+"]:"+arr2[i]);
}
}

随便写的,你尝试下吧


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/13386050.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-07-26
下一篇 2023-07-26

发表评论

登录后才能评论

评论列表(0条)

保存