public class IsPrime { //工具类
// 输入一个数,判断是否为质数,费时方法
public static Integer isPrime(int num) {
if (num == 0 || num == 1)
return -1;
for (int i = 2; i < num - 1; i++) {
if (num % i == 0) return -1;
}
return num;
}
}
// 一个大于1的自然数,除了1和它自身外,不能被其他自然数整除的数叫做质数;否则称为合数。
List listrandom=new ArrayList(); //1-1000000数组
List res=new ArrayList(); //所有质数集合
for(int i=1;i<=100000;i++){
listrandom.add(i);
}
for (Integer integer : listrandom) {
if((IsPrime.isPrime(integer)!=-1)){
res.add(IsPrime.isPrime(integer));
}
}
// int a= (int) Math.floor(Math.random()*res.size());
//100个不同的质数
List listRandom = new ArrayList();
//随机取出n条不重复的数据,这里我设置随机取100条数据
for (int i = 100; i >=1; i--) {
Random random = new Random();
Math.random();
//在数组大小之间产生一个随机数 j
int j = random.nextInt(res.size()-1);
//取得list 中下标为j 的数据存储到 listRandom 中
listRandom.add(listrandom.get(j));
//把已取到的数据移除,避免下次再次取到出现重复
listrandom.remove(j);
}
// TreeSet 有序集合 从小到大排序
List newList = new ArrayList(new TreeSet(listRandom));
//循环取出 newList 中的数据
for(Object l:newList) {
System.out.println(l);
}
public int JumpFloor(int target) {
if (target == 1){
return 1;
}else if(target == 2){
return 2;
} else {
return JumpFloor(target-1)+JumpFloor(target-2);
}
}
学号 |
姓名 |
性别 |
年龄 |
1001 |
张三 |
男 |
20 |
1002 |
李四 |
女 |
22 |
1003 |
王五 |
男 |
18 |
// json数组
// static String json = "[
// {'学号':'1001','姓名':张三,'性别':男,'姓名':26,'年龄':20},
// {'学号':'1002','姓名':李四,'性别':女,'姓名':26,'年龄':22},
// {'学号':'1003','姓名':王五,'性别':男,'姓名':26,'年龄':18},
// ]";
学生基本信息:
Student
ID NUMBER 学号
NAME VARCHAR2(10) 姓名
SEX VARCHAR2(2) 性别:男女
CLASS VARCHAR2(2) 班级:1,2,3,4
AGE NUMBER 年龄
SUBJECT VARCHAR2(10) 最高分课程
SCORE NUMBER 最高成绩
学生考试成绩:Score
ID NUMBER 学号
SUBJECT VARCHAR2(10) 课程
YEAR NUMBER 考试年份
SCORE NUMBER 成绩
/*
Navicat Premium Data Transfer
Source Server : 0702
Source Server Type : MySQL
Source Server Version : 50723
Source Host : localhost:3306
Source Schema : qqq
Target Server Type : MySQL
Target Server Version : 50723
File Encoding : 65001
Date: 13/02/2022 13:04:14
*/
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;
-- ----------------------------
-- Table structure for student
-- ----------------------------
DROP TABLE IF EXISTS `student`;
CREATE TABLE `student` (
`ID` int(10) NOT NULL COMMENT '学号',
`NAME` varchar(10) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '姓名',
`SEX` varchar(2) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '性别:男女',
`CLASS` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '班级:1,2,3,4',
`AGE` int(11) NULL DEFAULT NULL COMMENT '年龄',
`SUBJECT` varchar(10) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '最高分课程',
`SCORE` int(10) NULL DEFAULT NULL COMMENT '最高成绩',
PRIMARY KEY (`ID`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
-- ----------------------------
-- Records of student
-- ----------------------------
INSERT INTO `student` VALUES (1, '张三', '男', '1', 18, '语文', 90);
INSERT INTO `student` VALUES (2, '李四', '男', '2', 18, '语文', 100);
INSERT INTO `student` VALUES (3, '王五', '男', '2', 18, '语文', 90);
INSERT INTO `student` VALUES (4, '丽丽', '女', '1', 18, '英语', 90);
SET FOREIGN_KEY_CHECKS = 1;
/*
Navicat Premium Data Transfer
Source Server : 0702
Source Server Type : MySQL
Source Server Version : 50723
Source Host : localhost:3306
Source Schema : qqq
Target Server Type : MySQL
Target Server Version : 50723
File Encoding : 65001
Date: 13/02/2022 13:04:46
*/
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;
-- ----------------------------
-- Table structure for score
-- ----------------------------
DROP TABLE IF EXISTS `score`;
CREATE TABLE `score` (
`ID` int(10) NULL DEFAULT NULL COMMENT '学号',
`SUBJECT` varchar(10) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '课程',
`YEAR` int(255) NULL DEFAULT NULL COMMENT '考试年份',
`SCORE` int(255) NULL DEFAULT NULL COMMENT '成绩'
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
-- ----------------------------
-- Records of score
-- ----------------------------
INSERT INTO `score` VALUES (1, '语文', 2021, 80);
INSERT INTO `score` VALUES (1, '数学', 2021, 90);
INSERT INTO `score` VALUES (1, '英语', 2021, 70);
INSERT INTO `score` VALUES (2, '语文', 2021, 100);
INSERT INTO `score` VALUES (2, '数学', 2021, 70);
INSERT INTO `score` VALUES (4, '英语', 2021, 23);
INSERT INTO `score` VALUES (3, '语文', 2021, 80);
INSERT INTO `score` VALUES (3, '数学', 2021, 12);
INSERT INTO `score` VALUES (3, '英语', 2021, 90);
INSERT INTO `score` VALUES (4, '语文', 2021, 90);
INSERT INTO `score` VALUES (4, '数学', 2021, 45);
INSERT INTO `score` VALUES (2, '语文', 2012, 50);
INSERT INTO `score` VALUES (2, '数学', 2012, 20);
INSERT INTO `score` VALUES (2, '英语', 2012, 30);
SET FOREIGN_KEY_CHECKS = 1;
-- 列出2012年1班各科成绩的平均值。
SELECT
AVG( sc.SCORE ) AS '平均成绩',
sc.YEAR AS '年份',
st.CLASS AS '班级',
sc.SUBJECT AS '课程'
FROM
score sc
LEFT JOIN student st ON sc.ID = st.ID
WHERE
sc.YEAR = 2021
AND st.CLASS = 1
GROUP BY
sc.SUBJECT
-- 列出2012年2班数学成绩不及格的学生人员列表。
SELECT
st.`NAME` AS '姓名',
sc.YEAR AS '年份',
st.CLASS AS '班级',
sc.SUBJECT AS '课程',
sc.SCORE AS '成绩'
FROM
score sc
LEFT JOIN student st ON sc.ID = st.ID
WHERE
sc.YEAR = 2012
AND st.CLASS = 2
AND sc.SUBJECT = '数学'
AND sc.SCORE < 60
-- 查出每位同学成绩所有成绩中分数最高的科目、成绩并更新到学生基本信息中最高分课程和最高成绩字段中。
UPDATE student AS A
INNER JOIN (
SELECT
MAX( sc.SCORE ) AS maxscore,
sc.ID AS maxid,
sc.`SUBJECT` maxsub
FROM
score sc
LEFT JOIN student st ON sc.ID = st.ID
GROUP BY
sc.ID
) AS B ON A.ID = B.maxid
SET A.ID = B.maxid,
A.SUBJECT = B.maxsub,
A.score = B.maxscore
1,Exception是程序正常运行中,可以预料的意外情况,可以被捕获,进行相应的处理.
2.Error 是指正常情况下,不大可能出现的情况,绝大部分的Error 都会导致程序处于非正常的,不可恢复的状态, 不需要捕获。
(hibernate、mybatis、ibatis)
1、用stringBuffer或者stringBuilder自带的reverse方法
public static String reverseTestOne(String s) {
return new StringBuffer(s).reverse().toString();
}
2.stringBuffer倒序拼接
public static String reverseTestThree(String s) {
StringBuffer sb = new StringBuffer();
for (int i = s.length() - 1; i >= 0; i--) {
sb.append(s.charAt(i));
}
return sb.toString();
}
3、切割递归反转
public static String reverseTestSix(String s) {
if (s.length() <= 1) {
return s;
}
return reverseTestSix(s.substring(1)) + s.substring(0, 1);
}
4、利用栈的先进后出
public static String reverseTestFour(String s) {
StringBuffer sb = new StringBuffer();
Stack stack = new Stack();
for (int i = 0; i < s.length(); i++) {
stack.push(s.charAt(i));
}
while (!stack.isEmpty()) {
//stack会返回栈顶值,并且会把该值删除
sb.append(stack.pop());
}
return sb.toString();
}
3. SQL间答题
表结构:
1、表名: g_ cardapply
字段(字段
名/类型/长度):
g applynpo varchar 8: /申请单号(关键字)
g_ applydate bigint 8; /申请日期
g_ state varchar 2; //申请状态
2、表名: g_ _cardapplydetail
字段(字段名/类型/长度):
g_ _applyno varchar //申请单号(关键字)
g_ name varchar 30; //申请人姓名
g_ idcard varchar 18; //申请人身份证号
g_ state varchar 2; //申请状态
其中,两个表的关联字段为申请单号。
题目:
-- 1.查询身份证号码为440401430103082的申请日期
SELECT
a.g_applydate,
a.g_applyno
FROM
g_cardapply a
LEFT JOIN g_cardapplydetail b ON a.g_applyno = b.g_applyno
WHERE
b.g_idcard = '440401430103082'
-- 2.查询同一个身份证号码有两条以上记录的身份证号码以及记录个数
SELECT
COUNT( 1 )
FROM
( SELECT * FROM g_cardapplydetail AS s WHERE g_idcard = '440401430103082' ) AS a
HAVING
count( 1 ) >= 2
-- 3.将身份证号码为440401430103082的记录在两个表中的申请状态均改为07
UPDATE g_cardapply a
LEFT JOIN g_cardapplydetail b ON a.g_applyno = b.g_applyno
SET a.g_state = '1',
b.g_state = '1'
WHERE
b.g_idcard = '440401430103082'
-- 4、删除g_ _cardapplydetail 表中所有姓李的记
DELETE
FROM
g_cardapplydetail
WHERE
g_applyno = ( SELECT g_applyno FROM ( SELECT g_applyno FROM g_cardapplydetail WHERE g_name LIKE '李%' ) aa );
java的字符类型采用的编码方案是Unicode
i++ 是先引用后增加 ,先在i所在的表达式中使用i的当前值,后让i加1
++i 是先增加后引用,让i先加1,然后在i所在的表达式中使用i的新值
他们其实都是i=i+1的意思,但是在程序中运行的时候的执行的顺序不一样。
i-- 和--i 也同理
上题y=2+(z--/++x)=2+(3/2)=3
利用字符重复出现的次数,编写一种方法,实现基本的字符串压缩功能。比如,字符串aabcccccaaa会变为a2b1c5a3。若“压缩”后的字符串没有变短,则返回原先的字符串。你可以假设字符串中只包含大小写英文字母(a至z)。
输入:"aabcccccaaa" 输出:"a2b1c5a3"
输入:"abbccd" 输出:"abbccd" 解释:"abbccd"压缩后为"a1b2c2d1",比原字符串长度更长。
class Solution {
public String compressString(String S) {
if (S.length() == 0) { // 空串处理
return S;
}
StringBuffer ans = new StringBuffer();
int cnt = 1;
char ch = S.charAt(0);
for (int i = 1; i < S.length(); ++i) {
if (ch == S.charAt(i)) {
cnt++;
} else {
ans.append(ch);
ans.append(cnt);
ch = S.charAt(i);
cnt = 1;
}
}
ans.append(ch);
ans.append(cnt);
return ans.length() >= S.length() ? S : ans.toString();
}
}
基本表结构:
student(sno,sname,sage,ssex)学生表
course(cno,cname,tno) 课程表
sc(sno,cno,score) 成绩表
teacher(tno,tname) 教师表
101,查询课程1的成绩比课程2的成绩高的所有学生的学号
select a.sno from
(select sno,score from sc where cno=1) a,
(select sno,score from sc where cno=2) b
where a.score>b.score and a.sno=b.sno
102,查询平均成绩大于60分的同学的学号和平均成绩
select a.sno as "学号", avg(a.score) as "平均成绩"
from
(select sno,score from sc) a
group by sno having avg(a.score)>60
103,查询所有同学的学号、姓名、选课数、总成绩
select a.sno as 学号, b.sname as 姓名,
count(a.cno) as 选课数, sum(a.score) as 总成绩
from sc a, student b
where a.sno = b.sno
group by a.sno, b.sname
或者:
selectstudent.sno as 学号, student.sname as 姓名,
count(sc.cno) as 选课数, sum(score) as 总成绩
from student left Outer join sc on student.sno = sc.sno
group by student.sno, sname
104,查询姓“张”的老师的个数
selectcount(distinct(tname)) from teacher where tname like '张%‘
或者:
select tname as "姓名", count(distinct(tname)) as "人数"
from teacher
where tname like'张%'
group by tname
105,查询没学过“张三”老师课的同学的学号、姓名
select student.sno,student.sname from student
where sno not in (select distinct(sc.sno) from sc,course,teacher
where sc.cno=course.cno and teacher.tno=course.tno and teacher.tname='张三')
106,查询同时学过课程1和课程2的同学的学号、姓名
select sno, sname from student
where sno in (select sno from sc where sc.cno = 1)
and sno in (select sno from sc where sc.cno = 2)
或者:
selectc.sno, c.sname from
(select sno from sc where sc.cno = 1) a,
(select sno from sc where sc.cno = 2) b,
student c
where a.sno = b.sno and a.sno = c.sno
或者:
select student.sno,student.sname from student,sc where student.sno=sc.sno and sc.cno=1
and exists( select * from sc as sc_2 where sc_2.sno=sc.sno and sc_2.cno=2)
107,查询学过“李四”老师所教所有课程的所有同学的学号、姓名
select a.sno, a.sname from student a, sc b
where a.sno = b.sno and b.cno in
(select c.cno from course c, teacher d where c.tno = d.tno and d.tname = '李四')
或者:
select a.sno, a.sname from student a, sc b,
(select c.cno from course c, teacher d where c.tno = d.tno and d.tname = '李四') e
where a.sno = b.sno and b.cno = e.cno
108,查询课程编号1的成绩比课程编号2的成绩高的所有同学的学号、姓名
select a.sno, a.sname from student a,
(select sno, score from sc where cno = 1) b,
(select sno, score from sc where cno = 2) c
where b.score > c.score and b.sno = c.sno and a.sno = b.sno
109,查询所有课程成绩小于60分的同学的学号、姓名
select sno,sname from student
where sno not in (select distinct sno from sc where score > 60)
110,查询至少有一门课程与学号为1的同学所学课程相同的同学的学号和姓名
select distinct a.sno, a.sname
from student a, sc b
where a.sno <> 1 and a.sno=b.sno and
b.cno in (select cno from sc where sno = 1)
或者:
select s.sno,s.sname
from student s,
(select sc.sno
from sc
where sc.cno in (select sc1.cno from sc sc1 where sc1.sno=1)and sc.sno<>1
group by sc.sno)r1
where r1.sno=s.sno
基本表结构:
student(sno,sname,sage,ssex)学生表
course(cno,cname,tno) 课程表
sc(sno,cno,score) 成绩表
teacher(tno,tname) 教师表
111、把“sc”表中“王五”所教课的成绩都更改为此课程的平均成绩
update sc set score = (select avg(sc_2.score) from sc sc_2 wheresc_2.cno=sc.cno)
from course,teacher where course.cno=sc.cno and course.tno=teacher.tno andteacher.tname='王五'
112、查询和编号为2的同学学习的课程完全相同的其他同学学号和姓名
这一题分两步查:
1,
select sno
from sc
where sno <> 2
group by sno
having sum(cno) = (select sum(cno) from sc where sno = 2)
2,
select b.sno, b.sname
from sc a, student b
where b.sno <> 2 and a.sno = b.sno
group by b.sno, b.sname
having sum(cno) = (select sum(cno) from sc where sno = 2)
113、删除学习“王五”老师课的sc表记录
delete sc from course, teacher
where course.cno = sc.cno and course.tno = teacher.tno and tname = '王五'
114、向sc表中插入一些记录,这些记录要求符合以下条件:
将没有课程3成绩同学的该成绩补齐, 其成绩取所有学生的课程2的平均成绩
insert sc select sno, 3, (select avg(score) from sc where cno = 2)
from student
where sno not in (select sno from sc where cno = 3)
115、按平平均分从高到低显示所有学生的如下统计报表:
-- 学号,企业管理,马克思,UML,数据库,物理,课程数,平均分
select sno as 学号
,max(case when cno = 1 then score end) AS 企业管理
,max(case when cno = 2 then score end) AS 马克思
,max(case when cno = 3 then score end) AS UML
,max(case when cno = 4 then score end) AS 数据库
,max(case when cno = 5 then score end) AS 物理
,count(cno) AS 课程数
,avg(score) AS 平均分
FROM sc
GROUP by sno
ORDER by avg(score) DESC
116、查询各科成绩最高分和最低分:
以如下形式显示:课程号,最高分,最低分
select cno as 课程号, max(score) as 最高分, min(score) 最低分
from sc group by cno
select course.cno as '课程号'
,MAX(score) as '最高分'
,MIN(score) as '最低分'
from sc,course
where sc.cno=course.cno
group by course.cno
117、按各科平均成绩从低到高和及格率的百分数从高到低顺序
SELECT t.cno AS 课程号,
max(course.cname)AS 课程名,
isnull(AVG(score),0) AS 平均成绩,
100 * SUM(CASE WHEN isnull(score,0)>=60 THEN 1 ELSE 0 END)/count(1) AS 及格率
FROM sc t, course
where t.cno = course.cno
GROUP BY t.cno
ORDER BY 及格率 desc
118、查询如下课程平均成绩和及格率的百分数(用"1行"显示):
企业管理(001),马克思(002),UML (003),数据库(004)
select
avg(case when cno = 1 then score end) as 平均分1,
avg(case when cno = 2 then score end) as 平均分2,
avg(case when cno = 3 then score end) as 平均分3,
avg(case when cno = 4 then score end) as 平均分4,
100 * sum(case when cno = 1 and score > 60 then 1 else 0 end) / sum(casewhen cno = 1 then 1 else 0 end) as 及格率1,
100 * sum(case when cno = 2 and score > 60 then 1 else 0 end) / sum(casewhen cno = 2 then 1 else 0 end) as 及格率2,
100 * sum(case when cno = 3 and score > 60 then 1 else 0 end) / sum(casewhen cno = 3 then 1 else 0 end) as 及格率3,
100 * sum(case when cno = 4 and score > 60 then 1 else 0 end) / sum(casewhen cno = 4 then 1 else 0 end) as 及格率4
from sc
119、查询不同老师所教不同课程平均分, 从高到低显示
select max(c.tname) as 教师, max(b.cname) 课程, avg(a.score) 平均分
from sc a, course b, teacher c
where a.cno = b.cno and b.tno = c.tno
group by a.cno
order by 平均分 desc
或者:
select r.tname as '教师',r.rname as '课程' , AVG(score) as '平均分'
from sc,
(select t.tname,c.cno as rcso,c.cname as rname
from teacher t ,course c
where t.tno=c.tno)r
where sc.cno=r.rcso
group by sc.cno,r.tname,r.rname
order by AVG(score) desc
120、查询如下课程成绩均在第3名到第6名之间的学生的成绩:
-- [学生ID],[学生姓名],企业管理,马克思,UML,数据库,平均成绩
select top 6 max(a.sno) 学号, max(b.sname) 姓名,
max(case when cno = 1 then score end) as 企业管理,
max(case when cno = 2 then score end) as 马克思,
max(case when cno = 3 then score end) as UML,
max(case when cno = 4 then score end) as 数据库,
avg(score) as 平均分
from sc a, student b
where a.sno not in
(select top 2 sno from sc where cno = 1 order by score desc)
and a.sno not in (select top 2 sno from sc where cno = 2 order by scoredesc)
and a.sno not in (select top 2 sno from sc where cno = 3 order by scoredesc)
and a.sno not in (select top 2 sno from sc where cno = 4 order by scoredesc)
and a.sno = b.sno
group by a.sno