java所有内容练习 - 左剃头
java所有内容练习
分支, 循环, 数据类型
有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?
int sum = 0;for (int i = 1; i < 5; i++) {
for (int j = 1; j < 5; j++) {
for (int j2 = 1; j2 < 5; j2++) {
if (i != j&&i != j2&&j!=j2) { //不能有重复数字
sum++; //计算能够组成的三位数的个数
System.out.println(i+" "+j+" "+j2);
}
}
}
}
System.out.println(sum);
有一分数序列:2 / 1,3 / 2,5 / 3,8 / 5,13 / 8,21 / 13...求出这个数列的前20项之和。
double j = 1.0; //分子double k = 1.0; //分母 规律:分子加分母等于下一个的分子,分子当分母
double sum2 = 0.0;
int ci = 0;
for (int i = 0; i < 20; i++) {
j = j+k;
k = j-k;
ci++;
sum2 = sum2 + j/k; //求20项的和
System.out.println(j/k);
}
System.out.println("和:"+sum2);
System.out.println("打印数量:"+ci);
求1! + 2! + 3! +...+ 20!的和
long result = 0;int f = 1;
for (int i = 1; i <= 20 ; i++) {
f = f*i;
result += f;
}
System.out.println(result);
一个5位数,判断它是不是回文数。即12321是回文数,个位与万位相同,十位与千位相同。
String s = "22327";if (s.charAt(0)== s.charAt(4)&&s.charAt(1)==s.charAt(3)) { //取索引值上的字符
System.out.println("是回文数");
}else {
System.out.println("不是回文数");
}
使用最少的代码将字符串String转换成字符数组
String s = "132";char[] ch = new char[s.length()]; //定义一个字符数组
ch = s.toCharArray(); // 将字符串转换成一个字符数组
System.out.println(ch);
//另一种方法(最少的代码)String s = "shutup";
System.out.println(Arrays.toString(s.toCharArray()));
将二进制字符串("11010011"), 八进制字符串("3325"), 十六进制字符串("5a3f")转换成数字, 在控制台上打印出来
String e = "11010011";String b = "3325";
String shi = "5a3f";
int e2 = Integer.parseInt(e);
System.out.println(e2);
int b2 = Integer.parseInt(b);
System.out.println(b2);
System.out.println(Integer.parseInt(shi,16)); //把字符串转换成16制
取一个随便的字符串中字母出现的次数, 打印出来
Scanner sc = new Scanner(System.in);System.out.println("请输入一串字符");
String shu = sc.nextLine();
char c [] = shu.toCharArray(); //将输入的字符串转换成一个字符数组
Map<Character,Integer> map = new HashMap<Character,Integer>();
for (char d : c) { //遍历
map.put(d, map.get(d) == null ? 1: map.get(d)+1); //三目运算符
}
System.out.println(map);
总结:此题用到了三目运算符,此处的字母为键值,如果此字母在map里面没有的,就是等于null,那么添进去的时候
就是记一个1,下次此字母再次出现的时候,数字加1,put不是添加的意思,而是修改的意思
有一个字符串形式的任意日期是"yyyy-MM-dd"的格式, 计算这个日期到1949年10月1日上午8点差了多少小时
String date1 = "1949-10-01 08:00";String date2 = "2017-12-07 09:58";
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm");
Date d1 = null;
Date d2 = null;
try {
d1 = sdf.parse(date1);
d2 = sdf.parse(date2);
} catch (ParseException e) {
e.printStackTrace();
}
long l1 = d1.getTime(); //获取的毫秒数
long l2 = d2.getTime();
System.out.println((l2-l1)/1000/60/60); //差几个小时
//一秒 = 1000毫秒,一分=60秒,一小时 = 60分
从data.txt文件中读取数据到程序中, 实现一个联动功能,
即输入主食会显示"1---馒头 2---煎饼 3---米饭", 再次输入会显示下一级菜单
data.txt文件中每一行都有被 "," 分割的三个值, 第一个值代表这项食物的编号(对于整个数据来说是唯一的),
第三个值表示所属的上一级食物分类
data.txt文件如下图:
实现的效果:
public class Food {private String xu;
private String ming ;
private String caidan;
public Food() {
}
public Food(String xu, String ming, String caidan) {
super();
this.xu = xu;
this.ming = ming;
this.caidan = caidan;
}
public String getXu() {
return xu;
}
public void setXu(String xu) {
this.xu = xu;
}
public String getMing() {
return ming;
}
public void setMing(String ming) {
this.ming = ming;
}
public String getCaidan() {
return caidan;
}
public void setCaidan(String caidan) {
this.caidan = caidan;
}
@Override
public String toString() {
return "菜单 [编号" + xu + ", 名字=" + ming + ", 类别=" + caidan + "]";
}
}
public class Read {public static void main(String[] args) {
List<Food> list2 = PrientFood("F:\\data.txt");
for (Food ff : list2) {
if (ff.getCaidan().equals("0")) { //把一开始的那个显示出来就可以了
System.out.println(ff);
}
}
Scanner scanner = new Scanner(System.in);
System.out.println("请选择输入编号");
String str = scanner.nextLine();
for (Food food : list2) {
if (str.equals(food.getCaidan())) {
System.out.println(food);
}
}
System.out.println("请选择输入编号");
String str2 = scanner.nextLine();
for (Food food : list2) {
if (str2.equals(food.getCaidan())) {
System.out.println(food);
}
}
scanner.close();
}
public static List<Food> PrientFood (String dizhi) { //此方法是把读到的文件放在一个集合里面
File file = new File(dizhi);
List<Food> list = null;
if (file.exists()) { //判断如果文件存在的话
try {
InputStream is = new FileInputStream(file);
InputStreamReader ir = new InputStreamReader (is,"UTF-8");
//字节流转换成字符流,碰到了乱码的问题,此时要考虑的就是这样的一种情况
BufferedReader br = new BufferedReader (ir);
String ss = null;
list = new ArrayList<Food>();
while ((ss = br.readLine())!= null) {
String [] str = ss.split(","); //将读到的内容转换成字符串数组
Food fd = new Food(str[0],str[1],str[2]);
//每次读一行,用","隔开的数组,每次取索引值
list.add(fd); //添加进集合里面
}
br.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}else {
System.out.println("没有找到文件");
}
return list; //返回值
}
}
写一个程序统计一个项目中src下的所有 .java 文件的代码行数总和(空行不算,)
public class Daima {public class Daima { //写一个程序统计一个项目中src下的所有 .java 文件的代码行数总和(空行不算,)
private static int daima; //代码行数
public static void main(String[] args) {
File file = new File("F:\\1117\\diyi\\src"); //文件
SuanShu(file);
System.out.println(daima);
}
public static void SuanShu(File file) {
if (file.exists()) {
File [] shu = file.listFiles(); //获取文件夹下文件和子文件夹
if (shu != null) { //判断里面有没有文件夹,或者是文件
for (File file2 : shu) { //遍历
if (file2.isDirectory()) { //是否是一个目录
SuanShu(file2); //递归,自身调用自身
}else {
if (file2.getName().endsWith(".java")) {
try {
Reader r = new FileReader(file2);
BufferedReader br = new BufferedReader(r);
String s = null;
while (( s = br.readLine()) != null) {
if (s.trim().length() >= 0) {
daima++;
}
}
br.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
}
}
}
写一个带线程同步的程序模拟5个人在火车站买票, 总共有4张票
public class TestCount {private static int i = 4; // 票数
public static synchronized void sail(String name) {
if( i > 0) {
try {
Thread.sleep(1);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(name+"买了第"+i-- + "张票");
}else {
System.out.println("没票了");
}
}
}
注意的一点: 静态方法里只能用静态变量,不可以是非静态变量 ! ! ! ! ! !
public class TestSynchronize {public static void main(String[] args) {
TestThread tt = new TestThread();
Thread t1 = new Thread(tt);
Thread t2 = new Thread(tt);
Thread t3 = new Thread(tt);
Thread t4 = new Thread(tt);
Thread t5 = new Thread(tt);
t1.setName("小王");
t2.setName("小吴");
t3.setName("小刚");
t4.setName("小刘");
t5.setName("小孙");
t1.start();
t2.start();
t3.start();
t4.start();
t5.start();
}
}
class TestThread implements Runnable{
//public Testcount testcount = new Testcount();
@Override
public void run() {
TestCount.sail(Thread.currentThread().getName()); //获取当前线程的名字
//调取的是Testcount里的sail方法,里面传进去的名字是当前线程的名字,名字就可以改了
}
}
设计一个分页工具类, 具有两个属性: page(当前页数),
rows(每页显示行数), 实例化一个List<String>, 并为其添加30条以上的任意数据,
再定义一个方法, 参数为此List和分页工具类, 调用时显示出相应的数据
要求:
分页工具类具有可设置属性的构造方法, 具有空参构造方法, 调用空参构造方法则自动为其设置属性
调用方法时需要显示List里面相应的内容, 并打印"当前是第__页, 显示从__到__条"
public class YeShu {private int page; //当前多少页
private int rows; //一页多少行
private int start; //在集合里面一开始要取的头(每一页的开头)
private int end; //在集合里面一开始要取的尾(每一页的结尾)
public YeShu() {
this.page = 1; //默认第一页
this.rows = 10; //默认的一页有10行数据
this.start = (page - 1) * rows; //此处注意的是集合里面的索引是从0开始的,也就是0-9
this.end = (page * rows) - 1;
}
public YeShu(int page, int rows) {
this.page = page;
this.rows = rows;
this.start = (page - 1) * rows;
this.end = (page * rows) - 1;
}
public void showpage () {
System.out.println("当前是第"+page+"页,从第"+(start+1)+"行,到第"+(end+1)+"行");
}
public int getPage() {
return page;
}
public void setPage(int page) {
this.page = page;
}
public int getRows() {
return rows;
}
public void setRows(int rows) {
this.rows = rows;
}
public int getStart() {
return start;
}
public void setStart(int start) {
this.start = start;
}
public int getEnd() {
return end;
}
public void setEnd(int end) {
this.end = end;
}
}
public class TestYeShu {public static void main(String[] args) {
List<String> list = new ArrayList<String>(); //实例化一个集合
for (int i = 1; i < 37; i++) {
list.add("aaa"+i); //添加了36条数据
}
YeShu ys = new YeShu(4,7);
showinfo(list,ys);
ys.showpage();
}
public static void showinfo (List<String> list,YeShu ys) {
for (int i = ys.getStart(); i <= ys.getEnd(); i++) { //循环取出里面集合里的数据
try {
System.out.println(list.get(i));
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
以上是 java所有内容练习 - 左剃头 的全部内容, 来源链接: utcz.com/z/389790.html