java数组练习
JAVA程序设计
1.
1
(计算字符串中单词的出现次数)编写程序,从控制台读取 100 个字符串,然后计算每
个字符串中单词的出现的次数。
例如:从控制输入“hello Java”
“hello world”
….
输出结果为:hello 2
Java
1
World
1
分析:
有100个字符串,每个字符串有若干个单词,这里以空格分隔。
首先可以想到利用split(python也有,多半多数程序设计语言都有)方法将字符串分隔得到数组。
再利用arraylist或Map等与迭代器遍历每个字符串分割得到的数组
计数利用arraylist或map的方法
此外也有hashmap
(当实际写的时候,我发现还是得用map,自带value计数)
总结:hashmap+iterator真香
package count;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.HashMap;
import java.util.Iterator;
public class count {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int n = 100;//输入100个字符串
String s;
String str_list[];
HashMap<String, Integer> map = new HashMap<String, Integer>();
while (n > 0) {
s = br.readLine();//读入一行
str_list = s.split(" ");//利用空格分隔得到字符串数组
for (String i : str_list) {
if (!map.containsKey(i)) {
map.put(i, 1);
} else {
map.put(i, map.get(i) + 1);
}
}
n--;
}
Iterator<String> iter = map.keySet().iterator();
while (iter.hasNext()) {
s = iter.next();
System.out.println(s + " " + map.get(s));
}
}
}
2.编写一个程序,使用随机函数 random 产生 1000 个【0-99】的整数,这些整数有可能可
能存在重复,程序对这些数据进行过滤后,去掉重复出现的数,排序并计算整数的个数。
例如,随机产生的数据为:1,10,43,10,2,1,98
输出结果为:1,2,10,43,98
数据个数为 5
分析:如果用第一题的hashmap可以做,出现n次设定对应的value为n。value大于1的只输出一次。
或者可以用arraylist或者hashset。hashset只会记录一次数据,但不能排序。
可以将set转为list后排序。
public class test {
public static void main(String[] args) {
Random ran = new Random(10);
// ArrayList<Integer> list = new ArrayList<Integer>();
// for (int i = 0; i < 1000; i++) {
// list.add(ran.nextInt(100));
// }
// for (int i = 0; i < list.size(); i++) {
// for (int j = 0; j < list.size(); j++) {
// if ((list.get(i) == list.get(j)) && (i != j)) {
// list.remove(j);
// j--;
// }
// }
// }
// list.sort(Comparator.naturalOrder());
// System.out.println(list);
// System.out.println(list.size());
HashSet<Integer> set = new HashSet<Integer>();
for (int i = 0; i < 1000; i++) {
set.add(ran.nextInt(100));
}
ArrayList<Integer> list = new ArrayList<Integer>();
for (int i : set) {
list.add(i);
}
Collections.sort(list);
System.out.println("输出结果为:"+list);
System.out.println("数据个数 "+list.size());
}
}
3 豆机游戏,也称为梅花瓶或者高尔顿瓶,它是一个用来制作统计实验的设备,是用英国科
学家赛弗兰克斯高尔顿的名字来命名的。它是一个三角形的均匀放置钉子(或钩子)的直立
板子,如下图所示(每个球都会选择一个随机路径,然后进入一个槽中)。
编写程序模拟豆机。程序应该提示用户输入球的个数以及机器的槽数。打印每个球的路
径模拟它的下落。例如,在图(a)中的球的路径是 LLRRLLR。而在图(c)中的球的路径是
RLRRLRR。使用条形图显示槽中球的最终储备量。下面是一个运行实例。
Enter the number of balls to drop:5
Enter the number of slots in the bean machine:8 (回车)
LRLRLRR
RRLLLRR
LLRLLRR
RRLLLLL
LRLRRLR
0
0
0 0 0
分析:
一开始做的时候,不知道如何根据路径求出下落的位置。
分析如图,利用随机数确定每次下落的路径,L为左,R为右。
层数=槽数-1
若R的个数为n,则落到第n+1个槽口
public class test {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.print("Enter the number of balls to drop:\n");
int num_ball = input.nextInt();// 球的个数
System.out.print("Enter the number of slots in the bean machine:\n");
int slots = input.nextInt();// 槽口数
input.close();
int slot[] = new int[slots];// 记录每个槽口的球的个数
int cent;
for (int i = 0; i < num_ball; i++) {
cent = 0;
for (int j = 0; j < slots - 1; j++) {
if (Math.random() < 0.5)
System.out.print('L');
else {
System.out.print('R');
cent++;
}
}
++slot[cent];
System.out.println();
}
int max = slot[0];
for (int i = 0; i < slots; i++) {
if (slot[i] > max)
max = slot[i];
}
for (int i = 0; i < max; i++) {
for (int j = 0; j < slots; j++) {
if (slot[j] >= max - i)
System.out.print(0);
}
System.out.println();
}
}
}
4(最大行和最大列)编写一个程序,在一个 4*$的矩阵中数据填入 0 和 1,打印该矩阵,找 到第一个具有最多 1 的行和列。
分析:二维数组
对每行与每列分析就行
public class test {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int matrix[][] = new int[4][4];
for (int i = 0; i < 4; i++) {
System.out.println("输入第" + (i + 1) + "行数据");
for (int j = 0; j < 4; j++) {
matrix[i][j] = scanner.nextInt();
}
}
scanner.close();
for (int i[] : matrix) {
for (int num : i) {
System.out.print(num + " ");
}
System.out.println();
}
int max_row = 0, max_col = 0;
int c_max_count;
int r_count, c_count, r_max_count = c_max_count = 0;
for (int i = 0; i < 4; i++) {
c_count = r_count = 0;
for (int j = 0; j < 4; j++) {
if (matrix[i][j] == 1)
r_count++;
if (matrix[j][i] == 1)
c_count++;
}
if (r_count > r_max_count) {
r_max_count = r_count;
max_row = i;
}
if (c_count > c_max_count) {
c_max_count = c_count;
max_col = i;
}
}
System.out.println("最大行为:" + (max_row + 1));
System.out.println("最大列为:" + (max_col + 1));
}
}