编程练习题一
1、将字符串[a-b-c-d-e-f]按[-]切割,找到[c]字符,替换为大写,然后倒序输出[f-e-d-C-b-a];
public class Test1 {
public static void main(String[] args) {
String str = "a-b-c-d-e-f";
String[] strs = str.split("-");
// 循环遍历,小写字母变大写
for (int i = 0; i < strs.length; i++) {
String s = strs[i];
if (s.equals("c")) {
strs[i] = s.toUpperCase();
}
}
String temp = "";
for (int i = strs.length - 1; i >= 0; i--) {
temp += strs[i] + "-";
}
// 去除最后一个短横
System.out.println(temp.substring(0, temp.length()-1));
}
}
2、 定义学生类(包含学号、姓名、年龄),将你所在小组组员添加到一个集合中,并按学号排序后输出 ;
public class Student implements Comparable<Student> {
private int code;//学号
private String name;//姓名
private int age;//年龄
//Getter和Setter方法
public int getCode() {
return code;
}
public void setCode(int code) {
this.code = code;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
//满参构造器
public Student(int code, String name, int age) {
super();
this.code = code;
this.name = name;
this.age = age;
}
//重写compareTo方法
@Override
public int compareTo(Student o) {
int flag;
if (this.code > o.code) {
flag = -1;
} else if (this.code == o.code) {
flag = 0;
} else {
flag = 1;
}
return flag;
}
//重写toString方法
@Override
public String toString() {
return "Student [code=" + code + ", name=" + name + ", age=" + age+ "]";
}
}
测试类:
package com.jiulingcode;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class Test2 {
public static void main(String[] args) {
List<Student> teams = new ArrayList<Student>();
// 新建学生对象
Student stu1 = new Student(1, "ZS", 15);
Student stu2 = new Student(3, "LS", 13);
Student stu3 = new Student(2, "JL", 18);
Student stu4 = new Student(4, "YZ", 12);
// 向集合添加学生对象
teams.add(stu1);
teams.add(stu2);
teams.add(stu3);
teams.add(stu4);
// 按学号倒叙排列
Collections.sort(teams);
// 遍历学生
for (Student stu : teams) {
System.out.println(stu);
}
}
}
3、在主类中定义方法f1(int n)和方法f2(int n),它们的功能都为求n!。方法f1()用循环实现,f2()用递归实现。在主方法main()中,以4为参数调用两个方法,并输出计算结果;
public class Test3{
public static void main (String[] args){
System.out.println("用循环实现求 n! 的结果(n=4):"+f1(4));
System.out.println("用递归实现求 n! 的结果(n=4):"+f2(4));
}
static long f1(int n){
long k=1;
for(int i=1;i<=n;i++)
k*=i;
return k;
}
static long f2(int n){
if(n==1)
return 1;
else
return n*f2(n-1);
}
}
4、查找字符串”daghreh”的子字符串集;
public class Test4{
/**
*API中String的常用方法
1、int indexOf(String str) :返回第一次出现的指定子字符串在此字符串中的索引。
2、int indexOf(String str, int startIndex):从指定的索引处开始,返回第一次出现的指定子字符串在此字符串中的索引。
3、int lastIndexOf(String str) :返回在此字符串中最右边出现的指定子字符串的索引。
4、int lastIndexOf(String str, int startIndex) :从指定的索引处开始向后搜索,返回在此字符串中最后一次出现的指定子字符串的索引。
*/
// 查找指定字符串是否存在
public static void main(String[] args) {
String str = "daghreh";
// 从头开始查找是否存在指定的字符
System.out.println(str.indexOf("h"));
// 从第五个字符位置开始往后继续查找
System.out.println(str.indexOf("h", 4));
//若指定字符串中没有该字符则系统返回-1
System.out.println(str.indexOf("x"));
}
}
5、请用不大于100的随机数实现一个大小为10的数组,并用冒泡排序法排序;
public static void main(String[] args) {
int temp;
int i;
int [] data;
Random r=new Random();
data = new int[15];
//通过运算得到范围内的数
for(i=0;i<data.length;i++){
data[i]=r.nextInt(100)%(100-10)+10;
}
//冒泡排序法
for(i=0;i<data.length;i++){
for(int j=i;j<data.length;j++){
if(data[j]<data[i]){
temp=data[j];
data[j]=data[i];
data[i]=temp;
}
}
}
for(int num:data){
System.out.print(num+"\t");
}
}
//通过判断筛选的代码如下:
public static void main(String[] args) {
int temp;
int i;
boolean decide=true;
int [] data;
Random r=new Random();
data = new int[10];
for(i=0;i<data.length;i++){
temp=r.nextInt(100);
if(temp<10){ //如果随机数小于10,什么也不做
i--;
decide=false;
}
if(decide){
data[i]=temp;
}
decide=true; //确保判断条件的稳定
}
//冒泡排序
for(i=0;i<data.length;i++){
for(int j=i;j<data.length;j++){
if(data[j]<data[i]){
temp=data[j];
data[j]=data[i];
data[i]=temp;
}
}
}
for(int num:data){
System.out.print(num+"\t");
}
}
6、请用代码实现一个单例模式;
饿汉式:
//单例模式:饿汉式
public class Hungry{
private static Hungry mHungry=new Hungry();
/**
*构造方法私有可以避免调用者错误的创建新的对象
*这还是很重要的
*线程安全
**/
private Hungry(){
}
/**
*供调用者在外部使用
**/
public static Hungry getInstance(){
return mHungry;
}
}
懒汉式(饱汉式):
//单例模式:懒汉式(饱汉式) 线程不安全—>线程安全需要加
public class FullMode{
private static FullMode mFullMode;
private FullMode(){
}
/*效率慢
public static Syschronized FullMode getInstance(){
if(mFullMode==null){
mFullMode=new FullMode;
}
return mFullMode;
}
*/
public static FullMode getInstance(){
if(mFullMode==null){
// 同步代码块用的锁是单例的字节码文件对象,且只能用这个锁
synchronized (FullMode.class) {
if (mFullMode == null) {
mFullMode=new FullMode();
}
}
}
return mFullMode;
}
}
7、编写一个Book类,该类至少有name和price两个属性。该类要实现Comparable接口,在接口的compareTo()方法中规定两个Book类实例的大小关系为二者的price属性的大小关系。在主函数中,选择合适的集合类型存放Book类的若干个对象,然后创建一个新的Book类的对象,并检查该对象与集合中的哪些对象相等。
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.List;
public class Book implements Comparable {
private String name;
private float price;
public Book(String name,float price){
this.name = name;
this.price = price;
}
public static void main(String[] args){
List<Book> list = new ArrayList<Book>();
Book b1 = new Book("Java基础教程",29.0f);
Book b2 = new Book("数据库技术",29.0f);
Book b3 = new Book("C++基础教程",29.0f);
Book b4 = new Book("C++",27.0f);
Book b5 = new Book("C语言",26.0f);
Book b6 = new Book("数据结构",28.0f);
Book book = new Book("模式识别", 29.0f);
list.add(b6);
list.add(b5);
list.add(b4);
list.add(b3);
list.add(b2);
list.add(b1);
Collections.sort(list);
System.out.println("新书:"+book.name+"价格相同的是:");
for(int i = 0; i<list.size();i++){
if(book.compareTo(list.get(i))==0){
System.out.println(list.get(i).name);
}
}
System.out.println("价格是"+book.price);
}
@Override
public int compareTo(Object o) {
Book b = (Book)o;
if(b.price>this.price){
return 1;
}else if(b.price<this.price){
return -1;
}else{
return 0;
}
}
}
8、小结:
今天是第二天写CSDN博文,从今天开始我将每天持续更新一篇博文,从明天开始将每天刷三道数据结构和算法题,并将它们更新到CSDN上,希望能够帮到一些小伙伴们!若有哪些不足的地方请多多指出!也欢迎各位小伙伴们提出宝贵的意见和建议!希望各位小伙伴能够技多不压身,在互联网的学习的道路上,互帮互助,共同成长,共同进步!加油!也愿我们都能在互联网的道路上愈走愈远!