给定一个数组,过滤其中重复的元素,并输出过滤后的新数组(自定义方法)
代码如下:
package com.apesource.demo01;
import java.util.Arrays;
//过滤重复元素
public class Test042 {
public static void main(String[] args) {
String[] phoneNumberArray = {
"131","133","137","131","139","133","131","135","187","135"};
String[] result01 = filter(phoneNumberArray);
System.out.println(Arrays.toString(result01));
}
public static String[] filter(String...array){
//创建新数组,用于保存过滤后的元素
String[] resultArray = new String[array.length];
// 依次遍历原数组中的元素
int n = 0;
for(int i = 0;i<array.length;i++) {
//临时变量
String temp = array[i];
//检查是是否存在重复元素
boolean isSame = false;//默认为false,代表没有重复
for(int k = 0;k < n;k++) {
if(temp.equals(resultArray[k])) {
isSame = true;
break;
}
}
if(!isSame) {
//没有发现重复值
resultArray[n++] = temp;
}
}
//判断是否存在null元素
if(n != resultArray.length) {
//复制数组内前n个元素(除去null元素)
resultArray = Arrays.copyOf(resultArray, n);
}
return resultArray;
}
}
区间测速:给定一段时间字符串数组,每两个为进入区间时间和驶出区间时间。给定数组为六辆车的时间数据
需求:1.计算这些车辆在区间内的平均车速。
2.输出用时最短和用时最长的车辆数据。
代码如下:
package com.apesource.demo01;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Arrays;
import java.util.Date;
/*
* 区间测速
* 区间距离为12KM
* 需求1:计算所有车辆通过该区间的平均时速(单位是秒/KM)
* 需求2:用时最短和用时最长
* 先将数据数组转化成Date类型,再使用getTime()得到毫秒值,
* 两两相减,得到时间值,再除以区间距离,得到平均时速数组,再求其平均值输出,排序,输出取首尾元素。
*/
public class Test043 {
public static void main(String[] args) throws ParseException {
// 原始数据
String[] dateArray = {
"14:32:18", "14:34:28", "15:27:53", "15:31:42", "16:44:10", "16:52:19", "17:33:57", "17:42:01", "17:36:19", "17:41:18", "17:58:52", "18:07:03" };
//1.String[] => Date[]
SimpleDateFormat Array = new SimpleDateFormat("hh:mm:ss");
Date[] Array1 = new Date[dateArray.length];
long[] Array2 = new long[dateArray.length];
int i = 0,k = 0;
for(i = 0;i<dateArray.length;i++) {
Array1[i] = Array.parse(dateArray[i]);
Array2[i] = Array1[i].getTime();
}
//2.将时间数组进行运算,得到时速数组
long[] speed=new long[Array2.length/2];
for(i = 0,k = 0;i<Array2.length-1 && k<Array2.length/2;i=i+2,k++) {
speed[k]=((Array2[i+1]-Array2[i])/1000);
}
//3.计算速度,平均速度
double[] result = new double[speed.length];
for(i=0;i<speed.length;i++) {
double temp = speed[i];
result[i]=12/temp;
}
System.out.println(Arrays.toString(result));
double par = 0;
for(i=0;i<result.length-1;i++) {
par =(par + result[i]);
}
System.out.println("平均速度为:" + par/6 +"km/s");
//输出最大和最小速度
for(i=0;i<result.length-1;i++) {
for(k=0;k<result.length-1-i;k++) {
if(result[k]>result[k+1]) {
double temp = result[k];
result[k] = result[k+1];
result[k+1] = temp;
}
}
}
System.out.println("最小速度为:"+result[0]+"km/s");
System.out.println("最大速度为:"+result[result.length-1]+"km/s");
}
}
此代码将所有循环都单独写了出来,目的是加深每一步的理解,之后会优化代码,使其简单有效
输入字符串shdkxns
格式化输出s,h,d,k,x,n,s
代码如下:
package com.apesource.test01;
import java.util.Scanner;
import java.util.StringJoiner;
public class Test02 {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
String line = input.next();
//转化为字符数组
char[] array = line.toCharArray();
StringJoiner joiner = new StringJoiner(",");
for(char c : array) {
joiner.add(String.valueOf(c));//讲数据类型转化为字符串
}
System.out.println(joiner);
}
}