第一次上机(01编写素数判断函数)
题目内容:
编写一个程序,打印100~200之间的素数,要求每行按10个数(数与数之间有一个空格间隔)的形式对其输出。Java代码:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18public class Prime {
public static void main(String[] args) {
int j, s = 0;
for (int i = 100; i <= 200; i++) {//找到100~200中的所有素数
j = 2;
while (i % j != 0) {
j++;
if (j == i) {
System.out.print(i + " ");
s++;
if(s%10==0){
System.out.println("");
}
}
}
}
}
}
第二次上机(02数字与英文互译 )
题目内容
设有3个数组内容如下:
String x[]={“zero”,”one”,”two”, “three”,”four”, “five”,”six”,”seven”,”eight”,”nine”} ;
String y[]={“ten”,”eleven”,”twelve”,”thirteen”,”fourteen”,”fifteen”, “sixteen”,”seventeen”,”eighteen”,”nineteen” };
String z[]={“twenty”,”thirty”,”forty”,”fifty”, “sixty”,”seventy”, “eighty”,”ninety” };
用Java命令行输入一个小于100的整数,将其翻成英文表示。
例如:
输入32,输出:thirty two
输入14,输出:fourteen
输入8,输出:eight
反之,输入英文表示,输出相应的整数
例如:
输入forty one,输出:41Java代码:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157import javax.swing.JOptionPane;
public class translate {
/*
输入数据类型说明:数字flag=2,英文flag=1,错误flag=0
*/
public static void main(String[] args)
{
System.out.println("*Translation of numbers and English*");
while(true)
{
String ss = JOptionPane.showInputDialog("请输入一个整数或英文", "");
if (ss.equals("quit"))
{
System.out.print("see you again");
break;
}
else if (CheckType(ss) == 1)
{
StringToNum(ss);
}
else if (CheckType(ss) == 2)
{
NumToString(ss);
}
else if (CheckType(ss) == 0)
System.out.println("error,please input again");
}
}
public static int CheckType(String ss)
{
int flag=0;
int i,j;
//进行简单的英文判断,非英文字符返回0报错
for(j=0;j<ss.length();j++)
{
if((ss.charAt(j)==' ')||(ss.charAt(j)>='a'&&ss.charAt(j)<='z'))
{
if(ss.length()!=(j+1)) continue;
else
{
return flag=1;
}
}
break;
}
//进行简单的数字判断,非纯数字会返回0报错
for(i=0;i<ss.length();i++)
{
if(ss.charAt(i)>='0'&&ss.charAt(i)<='9')
{
if(ss.length()!=(i+1)) continue;
else
{
return flag=2;
}
}
break;
}
return flag;
}
public static void NumToString(String ss) {
String x[] = {"zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine"};
String y[] = {"ten", "eleven", "twelve", "thirteen", "fourteen", "fifteen", "sixteen", "seventeen", "eighteen", "nineteen"};
String z[] = {"twenty", "thirty", "forty", "fifty", "sixty", "seventy", "eighty", "ninety"};
int t = Integer.parseInt(ss);
if (t >= 0 && t < 10) {
System.out.println(x[t]);
} else if (t >= 10 && t < 20) {
System.out.println(y[t - 10]);
} else if (t >= 20 && t < 100) {
System.out.println(z[t / 10 - 2]+" "+x[t % 10]);
}
else
System.out.println("error,please input again");
}
public static void StringToNum(String ss) {
String x[] = {"zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine"};
String y[] = {"ten", "eleven", "twelve", "thirteen", "fourteen", "fifteen", "sixteen", "seventeen", "eighteen", "nineteen"};
String z[] = {"twenty", "thirty", "forty", "fifty", "sixty", "seventy", "eighty", "ninety"};
/*对于英文首先要判断它是否有空格进行分类flag=0没有空格,flag=1有空格
*/
String s1="",s2="";
int i;
int flag=2;//对于空格的判断,默认为2
//先判断是否有空格,有则置flag=1,没有flag=0;
for( i=0;i<ss.length();i++)
{
if(ss.charAt(i)==' ')
{
flag=1;
break;
}
else flag=0;
}
if(flag==0)//没有空格
{
boolean p=true;
int l;//判断从0~19
for(l=0;l<10;l++)
{
if(ss.equals(x[l]))
{
System.out.println(l);
p=false;
break;
}
else if(ss.equals(y[l]))
{
System.out.println(l+10);
p=false;
break;
}
}
int k;//判断是10的倍数时
for(k=0;k<8;k++)
{
if(ss.equals(z[k]))
{
System.out.println(10*(k+2));
p=false;
break;
}
}
if(p)
System.out.println("error,please input again");
}
if(flag==1)//有空格
{
int input=0;
int s=0;//判断步数
s1=ss.substring(0, i);
s2=ss.substring(i+1, ss.length());
for(int j=0;j<8;j++)
{
if(s1.equals(z[j]))//匹配十位数
{
input=10*(j+2);
s++;
break;
}
}
for(int k=0;k<10;k++)
{
if(s2.equals(x[k]))
{
input+=k;
s++;
break;
}
}
if(input!=0 && s==2)//s表示两步都执行了,避免sss one这种输入出现时的错误
System.out.println(input);
else
System.out.println("error,please input again");
}
}
}
掌握几个类的方法
String
中的方法:equals(“char”)
判断两个字符串是否相等不能直接用==,而要调用此函数。length()
返回字符串长度charAt(j)
返回索引为j的字符串中的字符substring(int beginIndex,int endIndex)
返回一个子字符串,从原字符串的beginIndex(包括)到endIndex(不包括)
int t = Integer.parseInt(ss)
将String转换为int类型
参数输入方法
使用JOptionPane类进行输入
需导入import javax.swing.JOptionPane
String ss = JOptionPane.showInputDialog("something will displace in windows", "")
将从界面输入的值赋值给String类型的ss。使用Scanner类来输入
需导入import java.util.Scanner
;Scanner scan=new Scanner(System.in)
创建一个Scanner对象String ss=scan.nextLine()
将从命令行读入的值赋值给String类型的ss。
第三次上机(03编写回文数判断的小程序)
- 题目内容:
编写一个Java应用程序,要求用户从键盘输入大于99的任意一个正整数,然后判断是否是回文数。回文数是指将该数含有的数字逆序排列后得到的数和原数相同,例如12121、3223都是回文数。 - Java代码:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51import javax.swing.JOptionPane;
public class Palindrome_number {
public static void main(String[] args) {
System.out.println("输入quit退出程序");
while (true) {
String ss = JOptionPane.showInputDialog("请输入大于99的任意一个正整数", "");
if (ss.equals("quit")) {
System.out.print("see you again");
break;
}
else if (CheckType(ss) == 1) {
int t = Integer.parseInt(ss);
if (t>99 && t == reverse(t)){
System.out.println("输入的数是回文数");
}
else
System.out.println("输入的数不是回文数");
}
else if (CheckType(ss) == 0)
System.out.println("error,please input again");
}
}
public static int CheckType(String ss)//数字判断
{
int flag=0;
int i;
//进行简单的数字判断,非纯数字会返回0报错
for(i=0;i<ss.length();i++)
{
if(ss.charAt(i)>='0'&&ss.charAt(i)<='9')
{
if(ss.length()!=(i+1)) continue;
else
{
return flag=1;
}
}
break;
}
return flag;
}
public static int reverse(int input){//对是否是回文数进行判断
int output=0;
while (input>0)
{
output=output*10+input%10;
input/=10;
}
return output;
}
}
第四次上机(04字符串统计)
- 题目内容:
从硬盘中读入文本文件,然后实现如下要求:
(1)统计26个字母每个字母开头的单词数;
(2)统计单词中含“or”字符串的单词数;
(3)统计长度为3的单词数。 - Java代码:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87import java.io.*;//导入io包
public class String_statistics{//定义一个统计(Statistics)类
static String strLine;//读取文本的每一行
static char letter[]={'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z',
'A','B','C','D','E','F','G','H','I','G','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z'};//含52个字符的数组
static int total[]=new int[26];//动态申请数组,用于统计26个字母每个字母开头的单词数
public static void main(String args[]){
try{
FileReader fr=new FileReader("/Users/apple/Desktop/java2/src/story.txt");//创建FileReader对象,用来读取字符流
BufferedReader br=new BufferedReader(fr); //缓存指定文件的输入
StringBuffer str=new StringBuffer();//将读入的每一行拼接在一起 StringBuffer为可变字符串类型
while(br.ready()){
strLine=br.readLine(); //读入一行数据
strLine=strLine.replace(',',' ');//将逗号替换成空格,输出改变后的结果
strLine=strLine.replace('.',' ');//将句号替换成空格,输出改变后的结果
strLine=strLine.replace('?',' ');//将问号替换成空格,输出改变后的结果
strLine=strLine.replace('!',' ');//将感叹号替换成空格,输出改变后的结果
strLine=strLine.replace(':',' ');//将封号替换成空格,输出改变后的结果
strLine=strLine.replace('(',' ');//将左括号替换成空格,输出改变后的结果
strLine=strLine.replace(')',' ');//将右括号替换成空格,输出改变后的结果
strLine=strLine.replace(" – "," ");//将连接符替换成空格,输出改变后的结果
//注意:此时还未处理单引号
str.append(strLine);//将每一行数据进行拼接
}
br.close();//关闭缓存流
fr.close();//关闭字符流
//-------------------------------------------------------------------------
System.out.println(str);//输出拼接后的结果
String a= str.toString();//类型转换 将StringBuffer转化为不可变的String
String split[] = a.split(" ");//按空格进行拆分a,将每个单词存在split数组中
int len=split.length;//len为单词总数
for(int i=0;i<len;i++){
if(split[i].length()>0&&split[i].charAt(0)=='\'')//判断每个单词首部字母是否是单引号
split[i]=split[i].replace("'"," "); //如果是,就用空格将其替代replace为全部替代'
}//比如'history'首先要去掉前面和后面的'
//---------------------------------------------------------------------------------
int newline=1;//控制每行输出的单词数,方便查看输出结果
for (String s : split) {//等价于for(int i=0;i<split.length();i++){String s=split[i];}
if(newline%30==0){
System.out.println(s);//输出每个单词,并且换行
}
else
System.out.print(s+" ");//输出每个单词,并且输出一个空格
newline++;
}
System.out.println();
//---------------------------------单词总数------------------------------------------
System.out.println();
int num=0;
for(int i=0;i<len;i++){//统计单词数
if(split[i].length()>0)//判断单词长度是否大于0
num++;//若是,则加1
}
System.out.println("The total number of words is "+num);//输出结果
//---------------------------------首字母--------------------------------------------
for(int i=0;i<len;i++){//检验所有单词
for(int j=0;j<52;j++)//52个字母(大小写),每一个字母都进行一次匹配
if(split[i].length()>0&&split[i].charAt(0)==letter[j])//单词长度大于0且首字母等于某个字母
total[j%26]++;//该字母数量加一,注意:a与A是同一个字母
}
System.out.println();
for(int i=0;i<26;i++){//输出所有字母的数量
System.out.println("The number of words at the beginning of "+letter[i]+" letter is "+total[i]);
}
//---------------------------------长度为3的单词数--------------------------------------
int count1=0;
for(int i=0;i<len;i++){
if(split[i].length()==3)//判断单词长度是否为3
count1++;//计数器加1
}
System.out.println();//输出结果
System.out.println("The total number of words with length 3 is "+count1);
//-----------------------------------or的数量----------------------------------------------
int length=str.length();//用未拆分前的的str的长度,方便使用
int count=0;
for(int i=0;i<length-1;i++)//对所有字母进行判断
{
if(str.charAt(i)=='o'&&str.charAt(i+1)=='r')//前一个字母为'o'且后一个字母为'r'
count++; //计数器加1
}
System.out.println("The total number of 'or' is "+count);//输出结果
}
catch(IOException e){//输入输出流出现问题,则抛出异常
e.printStackTrace();
}
}
}
掌握了几个类的方法:
String
(不可变字符串)中的方法:replace('oldchar','newchar ')
,将文本中的所有oldchar
替换成newchar
;split(" ")
,根据匹配给定的正则表达式来拆分字符串。注意:
. 、 $、 | 和 *
等转义字符,必须得加\\
,当为多个分隔符,可以用 | 作为连字符。charAt(i)
:找到字符串中第i个元素
StringBuffer
(可变字符串)中的方法:append(strLine)
将每一行数据进行拼接。toString()
类型转换,将StringBuffe
类转化为不可变的String
类
for循环的一种变式的写法
1 | for(String s:str) |
注意:此方法是J2SE 1.5提供的另一种形式的for循环,可以用来处理不知道str长度的情况
文件读写模版
1 | FileReader fr=new FileReader("相对应的文件地址");//创建FileReader对象,用来读取字符流 |