【转】java初学基础班经典练手小程序300例(飘叶寻梦整理)

一.函数
1.
*************************************************************************************************************************************
编程题:
 定义一个功能,完成对考试成绩的等级划分。
 90~100 A 优秀
 80~89 B 良好
 70~79 C 中等
 60~69 D 及格
 60以下 E 不及格

class  Test04
{
 public static void main(String[] args)
 {
  char level =getLevel(78);
  System.out.println("level="+level);
 }

//第二种方法:因为return是个变量,我们可以定义一个变量chr来表示return 然后返回到这个变量就行了。

public static char getLevel(int num)
  {

char chr;
   if(num>=90 && num<=100)
   chr= ‘a‘;
  else if(num >=80 && num<=89)
   chr= ‘b‘;
  else if(num >=70 && num<=79)
   chr= ‘c‘;
  else if(num >=60 && num<=69)
   chr= ‘d‘;
  else
   chr=‘e‘;
   return chr;
  }
     
}

二.数组

***********************************************************************************************************************************
1.获取一个数组中的最值???
***********************************************************************************************************************************

//先遍历数组,然后再这个遍历里面加上条件语句,然后再找出最大值,遍历一般都用for语句,这个以后记着了

主函数中的写法:

public static void main(String[] args)
 {
  int [] arr={22,23,34,56,76,23};
  int max=getMax(arr);
  System.out.println("max="+max);
 }

程序写法:

不加注释的写法:
public static int getMax(int [] arr)
 {
  int max =arr [0];
  for (int x=1;x<arr.length;x++ )
  {
   if (arr[x]>max)
   {
    max =arr[x];
   }  
  }
   return max;
 }

加完注释的写法:
public static int getMax(int[] arr)
 {
  //1,定义变量用于记录住每次比较完较大的值,初始化为数组中的任意一个元素。
  int max = arr[0];

//2,对数组元素进行遍历。
  for(int x=1; x<arr.length; x++)
  {
   //3,将遍历到的元素和变量中存储的元素进行比较。将大的值存储到变量中。
   if(arr[x]>max)
    max = arr[x];
  }
  return max;
 }

***********************************************************************************************************************************
2.对一个数组进行遍历?????????????????
***********************************************************************************************************************************
主函数中的调用:
int [] arr={36,23,55,65,23,45,65,32};
  printArry(arr);

函数的书写:
public static void printArry(int [] arr)
 {
   for (int x=0;x<arr.length ;x++ )
  {
   if (x!=arr.length-1)
   System.out.print(arr[x]+".");
   else
   System.out.print(arr[x]);
  }
   
 }

***********************************************************************************************************************************
3.对数组中的位置进行置换?????????????????
***********************************************************************************************************************************
public static int swap(int []arr,int a,int b)
 {
  int temp=arr[a];
  arr[a]=arr[b];
  arr[b]=temp;
 }

***********************************************************************************************************************************
4.定义一个输出语句?????????????????
***********************************************************************************************************************************
public static void sop(String str)
 {
  System.out.println(str);
 }

***********************************************************************************************************************************
5.使用选择排序法对数组进行排序?????????????????
***********************************************************************************************************************************
//选择排序

public static void selectSort(int [] arr)
 {
  for (int x=0;x<arr.length-1 ; x++)
  {
   for(int y=x+1;y<arr.length;y++)
   {
    if (arr[x]>arr[y]) //假如把这个>号换个方向,那么它的排序后的顺序就换了。
    {
     swap(arr,x,y);
    }
   }
  }
 }

public static void sop(String str)
 {
  System.out.println(str);
 }

public static void swap(int []arr,int a,int b)
 {
  int temp=arr[a];
  arr[a]=arr[b];
  arr[b]=temp;

}

public static void printArry(int [] arr)
 {
   for (int x=0;x<arr.length ;x++ )
  {
   if (x!=arr.length-1)
   System.out.print(arr[x]+".");
   else
   System.out.println(arr[x]);
  }
   
 }

***********************************************************************************************************************************
6.使用冒泡排序法对数组进行排序?????????????????
***********************************************************************************************************************************

主函数调用如下:
int [] arr={36,23,55,65,23,45,65,32};
  sop("排序前");
  printArry(arr);
  sop("排序后");
  bubbleSort(arr);
  printArry(arr);

程序如下:
 public static void bubbleSort(int[] arr)
{
  for (int x=0;x<arr.length-1 ;x++ )
 {
  for (int y=0;y<arr.length-1-x ;y++ )
  {
   if (arr[y]<arr[y+1])
   {
    swap(arr,y,y+1);
   }
   
  }
 }
}
***********************************************************************************************************************************
7.对数组中的元素进行反转?????????????????
***********************************************************************************************************************************

程序如下:
  public static void reverseArry(int[] arr)
  {
   for (int start=0,end=arr.length-1 ;start<end; start++,end--)
   {
    swap(arr,star,end);
   }

}

***********************************************************************************************************************************
8.演示二分查找法????????????????
***********************************************************************************************************************************
 
 public static int binarySearch(int[] arr,int key)
 {
  //1,需要定义三个变量,用于记录住角标的变化。
  int min,max,mid;
  min = 0;
  max = arr.length-1;
  //只要min和max之间有距离,就有了折半的可能,而且有可能折半多次,使用while循环。。
  while(min<=max)
  {
   //获取中间角标。
   mid = (max+min)/2;    //mid = (max+min)>>1;

//获取中间角标上的元素和key进行比较。
   //来确定min和max的新值。或者叫做,确定新的查找范围。
   if(key>arr[mid])
    min = mid + 1;
   else if(key<arr[mid])
    max = mid - 1;
   else
    return mid;
  }
  return -1;
 }

***********************************************************************************************************************************
9.找一个数组中查找一个元素的第一次出现的位置????????????????
***********************************************************************************************************************************

public static int getIndex(int[] arr,int key)
 {
  for(int x=0; x<arr.length; x++)
  {
   if(arr[x]==key)
   return x;
  }
  return -1;
 }

***********************************************************************************************************************************
10.数组中查表法的应用--通过用户的指定星期数字,返回给用户对应的星期中文或者英文.????????????????
***********************************************************************************************************************************

class ArrayTest3
{
 public static void main(String[] args)
 {

String week = getWeekText(8);//这句话输出的结果是星期几,这个输出的是字符串的类型的,所以应该使用字符串来表示,不能够使用int来表示。
  System.out.println("week="+week);
 }

public static String getWeekText(int num)
 {

if(num>7 || num<1)
  {
   return num+"没有对应的星期";
  }
  String[] weeks = {"","星期一","星期二","星期三","星期四","星期五","星期六","星期日"};//写一个包含星期的数组,这个数组的下标一定要是有顺序的。

return weeks[num];
 }
}

***********************************************************************************************************************************
11.对二维数组进行求和??????????????
***********************************************************************************************************************************

class  Arry2Test
{
 public static void main(String[] args)
 { 
  int arr[] []={{22,33,12,32},{23,54,12,11},{65,87,89,23}}
  int sum=0;
  //先遍历数组,然后再求和
  for (int x=0;x<arr.length;x++)
  {
   for (int y=0;y<arr[x].length ;y++)
   {
    sum=sum+arr[x][y];
   }
  }
  System.out.println("sum="+sum)
 }
}

三、线程

四、集合

***********************************************************************************************************************************

1.string的一些练习??????????????

***********************************************************************************************************************************

String str = "abnbacd";

String s = str.replace("nba", "haha");

System.out.println("s="+s);

System.out.println(str);

char[] chs = str.toCharArray();//将字符串转成字符数组。

boolean b = str.contains("Demo");

System.out.println("b="+b);

boolean b1 = str.endsWith(".java");

str = "zhangsan,lisi,wangwu";

String[] names = str.split(",");

for (int i = 0; i < names.length; i++) {

System.out.println(names[i]);

}

str = "     ab   c     ";

str = str.trim();

System.out.println("-"+str+"-");

********************************************************************************************************************************

2.获取一个子串在字符串中出现的次数。"nbawernbatyunbaidfnbaghjnba" nba出现了几次??????????????+1

***********************************************************************************************************************************

package cn.itcast.api.p2.string.test;

public class StringTest2

{

public static void main(String[] args)

{

String s1 = "nbawernbatyunbaidfnbaghjnba";

String key = "nba";

int count = getSubCount(s1, key);

System.out.println(key + ",count=" + count);

String s2 = "abcde";

s2 = reverseString(s2);

System.out.println("reverse:" + s2);

}

public static String reverseString(String str)

{

// 1,将字符串转成字符数组。

char[] chs = str.toCharArray();

reverseArrary(chs);

return new String(chs);// 通过构造器将字符数组转成字符串。

}

private static void reverseArrary(char[] chs)

{

for (int start = 0, end = chs.length - 1; start < end; start++, end--)

{

swap(chs, start, end);

}

}

private static void swap(char[] chs, int start, int end)

{

char temp = chs[start];

chs[start] = chs[end];

chs[end] = temp;

}

public static int getSubCount(String str, String key)

{

// 1,定义变量,一个是计数器,一个是记录位置。

int count = 0;

int index = 0;

// 2,调用indexOf方法获取key出现的位置。

while ((index = str.indexOf(key, index)) != -1)

{

index = index + key.length();

count++;

}

return count;

}

}

***********************************************************************************************************************************

3.获取两个字符串中最大相同子串。

* 如:"rtyuicctvoprtyu"

*         "cvbcctvnm"  最大相同是cctv?????????????? +1

***********************************************************************************************************************************

package cn.itcast.api.p2.string.test;

public class StringTest4 {

public static void main(String[] args) {

String s1 = "rtyuicctvoprtyu";

String s2 = "cvbcctvnm";

String maxsub = getMaxSubstring(s2,s1);

System.out.println("maxsub="+maxsub);

}

public static String getMaxSubstring(String s1, String s2) {

String max,min;

max = s1.length()>s2.length()?s1:s2;

min = max.equals(s1)?s2:s1;

// System.out.println("max="+max+",,min="+min);

for(int x=0; x<min.length(); x++){

for(int y=0,z=min.length()-x; z!=min.length()+1; y++,z++){

//获取s2子串

String temp = min.substring(y,z);

// System.out.println(temp);

if(max.contains(temp)){//s1.indexOf(temp)!=-1

return temp;

}

}

}

return null;

}

}

***********************************************************************************************************************************

4,对这个字符串数组进行字典顺序的排序。

* {"aaa","abc","cba","nba","qq","zz"}??????????????

***********************************************************************************************************************************

package cn.itcast.api.p2.string.test;

public class StringTest5 {

public static void main(String[] args) {

String[] strs = {"cba","abc","nba","zz","qq","aaa"};

sortString(strs);

for (int i = 0; i < strs.length; i++) {

System.out.print(strs[i]+",");

}

}

public static void sortString(String[] strs) {

for (int i = 0; i < strs.length-1; i++) {

for (int j = i+1; j < strs.length; j++) {

if(strs[i].compareTo(strs[j])>0)

swap(strs,i,j);

}

}

}

private static void swap(String[] strs, int i, int j) {

String  temp = strs[i];

strs[i] = strs[j];

strs[j] = temp;

}

public static void sort(int[] arr){

for (int i = 0; i < arr.length-1; i++) {

for (int j = i+1; j < arr.length; j++) {

if(arr[i]>arr[j]){

swap(arr,i,j);

}

}

}

}

private static void swap(int[] arr, int i, int j) {

int temp = arr[i];

arr[i] = arr[j];

arr[j] = temp;

}

}

***********************************************************************************************************************************

5. "34 9 -7 12 67 25"要求对这个字符串中的数值进行从小到大的排序,??????????????(很重要)

***********************************************************************************************************************************

package cn.itcast.api.p2.wrapper.test;

import java.util.Arrays;

public class WrapperTest2 {

private static final String SPACE = " ";

public static void main(String[] args) {

String str = "34 9 -7 12 67 25";

str = sortStringNumber(str);

System.out.println(str);

}

public static String sortStringNumber(String str) {

//1,将字符串中的数值通过指定的规则进行切割获取字符串数组。

String[] str_nums = toStringArray(str);

//2,将字符串数组转成int数组。

int[] nums = toIntArray(str_nums);

//3,对int数组排序;

sortIntArray(nums);

//4,将int数组变成字符串。

return arrayToString(nums);

}

private static String arrayToString(int[] nums) {

//1,创建字符串缓冲区。

StringBuilder sb = new StringBuilder();

for (int i = 0; i < nums.length; i++) {

if(i!=nums.length-1)

sb.append(nums[i]+SPACE);

else

sb.append(nums[i]);

}

return sb.toString();

}

private static void sortIntArray(int[] nums) {

Arrays.sort(nums);

}

private static int[] toIntArray(String[] str_nums) {

//1,先定义一个int数组。

int[] arr = new int[str_nums.length];

//2,对字符串数组进行遍历。

for (int i = 0; i < str_nums.length; i++) {

//将数组格式的字符串转成整数。存储到arr数组中。

arr[i] = Integer.parseInt(str_nums[i]);

}

return arr;

}

private static String[] toStringArray(String str) {

return str.split(SPACE);

}

}

***********************************************************************************************************************************

1.string的一些练习??????????????

***********************************************************************************************************************************

***********************************************************************************************************************************

1.string的一些练习??????????????

***********************************************************************************************************************************

五、IO操作

***********************************************************************************************************************************

1.把一个文件夹中的内容拷贝到另一个文件夹中去??????????????

***********************************************************************************************************************************

package cn.itcast.io.p3.test;

import java.io.FileReader;

import java.io.FileWriter;

import java.io.IOException;

public class CopyTextTest2 {

public static void main(String[] args) {

//1,定义字符输入流和字符输出流的引用。

FileReader fr = null;

FileWriter fw = null;

try {

//2,对流对象进行初始化。

fr = new FileReader("demo.txt");

fw = new FileWriter("copy_demo2.txt");

//3,定义一个数组缓冲区。用于缓冲读取到的数据。

char[] buf = new char[1024];

//4,读写操作。

int len = 0;

while((len = fr.read(buf))!=-1){

fw.write(buf,0,len);

}

} catch (Exception e) {

System.out.println(e.toString());

}finally{

if(fw!=null)

try {

fw.close();

} catch (IOException e) {

throw new RuntimeException("写入关闭失败");

}

if(fr!=null)

try {

fr.close();

} catch (IOException e) {

e.printStackTrace();

}

}

}

}

*********************************************************************************************

2.使用字节流拷贝一个MP3文件?

**********************************************************************************************

第一种方法,使用自定义数组缓冲区的方式。 (第一种方法为主)

public static void main(String[] args) throws IOException {

FileReader fr = new FileReader("c:\\0.jpg");

FileWriter fw = new FileWriter("c:\\1.jpg");

long start = System.currentTimeMillis();

 copy_1();

long end = System.currentTimeMillis();

System.out.println("毫秒值:"+(end-start));

}

//自定义数组缓冲区的方式。

public static void copy_1() throws IOException {

//1,读取流对象,和mp3关联。

FileInputStream fis = new FileInputStream("C:\\0.mp3");

//2,写入流对象,明确存储mp3数据的目的。

FileOutputStream fos = new FileOutputStream("c:\\1.mp3");

//3,定义一个字节缓冲区。

byte[] buf = new byte[1024*8];

int len = 0;

while((len=fis.read(buf))!=-1){

fos.write(buf,0,len);

}

fos.close();

fis.close();

}

第二种方法:使用字节流自带缓冲区(慎用)

public static void main(String[] args) throws IOException {

FileReader fr = new FileReader("c:\\0.jpg");

FileWriter fw = new FileWriter("c:\\1.jpg");

long start = System.currentTimeMillis();

 copy_2();

long end = System.currentTimeMillis();

System.out.println("毫秒值:"+(end-start));

}

public static void copy_2() throws IOException {

FileInputStream fis = new FileInputStream("C:\\0.mp3");

FileOutputStream fos = new FileOutputStream("c:\\2.mp3");

BufferedInputStream bufis = new BufferedInputStream(fis);

BufferedOutputStream bufos = new BufferedOutputStream(fos);

int by = 0;

while((by=bufis.read())!=-1){

bufos.write(by);

}

bufos.close();

bufis.close();

}

第三种方法:创建一个刚刚好的缓冲区。(不建议使用刚刚好的缓冲区,因为如果文件大的话,内存就会溢出)

public static void main(String[] args) throws IOException {

FileReader fr = new FileReader("c:\\0.jpg");

FileWriter fw = new FileWriter("c:\\1.jpg");

long start = System.currentTimeMillis();

 copy_1();

long end = System.currentTimeMillis();

System.out.println("毫秒值:"+(end-start));

}

//不建议。使用刚刚好的缓冲区。因为文件过大会溢出。

public static void copy_3() throws IOException {

FileInputStream fis = new FileInputStream("C:\\0.mp3");

FileOutputStream fos = new FileOutputStream("c:\\3.mp3");

byte[] buf = new byte[fis.available()];

fis.read(buf);

fos.write(buf);

fos.close();

fis.close();

}

第四种方法:单字节复制。

public static void main(String[] args) throws IOException {

FileReader fr = new FileReader("c:\\0.jpg");

FileWriter fw = new FileWriter("c:\\1.jpg");

long start = System.currentTimeMillis();

 copy_4();

long end = System.currentTimeMillis();

System.out.println("毫秒值:"+(end-start));

}

public static void copy_4() throws IOException {

FileInputStream fis = new FileInputStream("C:\\0.mp3");

FileOutputStream fos = new FileOutputStream("c:\\4.mp3");

int by = 0;

while((by=fis.read())!=-1){

fos.write(by);

}

fos.close();

fis.close();

*********************************************************************************************

3.获取键盘录入,并把录入字符转换成大写输出出来。

********************************************************************************************

package cn.itcast.io.p3.transstream.demo;

import java.io.BufferedReader;

import java.io.BufferedWriter;

import java.io.FileInputStream;

import java.io.FileOutputStream;

import java.io.IOException;

import java.io.InputStreamReader;

import java.io.OutputStreamWriter;

public class TransStreamDemo2 {

public static void main(String[] args) throws IOException {

简写为下面这样:

BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));

BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));

BufferedReader bufr = new BufferedReader(new InputStreamReader(new FileInputStream("tempfile\\fos.txt")));

BufferedWriter bufw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream("tempfile\\fos1.txt")));

//频繁的读写操作。

String line = null;

while((line=bufr.readLine())!=null){

if("over".equals(line))

break;

bufw.write(line.toUpperCase());

bufw.newLine();

bufw.flush();

}

//因为是从System获取的流可以不关闭,随着系统的结束而结束。

bufw.close();

bufr.close();

}

}

*********************************************************************************************

4.练习:文件类型名过滤器????????????

********************************************************************************************

package cn.itcast.io.p1.file;

import java.io.File;

import java.io.FilenameFilter;

public class FileterBySuffix implements FilenameFilter

{

private String  suffix;

public FileterBySuffix(String suffix)

{

super();

this.suffix = suffix;

}

@Override

public boolean accept(File dir, String name)

{

return name.endsWith(suffix);

}

}

*********************************************************************************************

5.练习:定义一个功能用于记录住软件运行的次数,如果运行次数大于5次。不要在运行????????????

********************************************************************************************

package cn.itcast.io.p5.properties;

import java.io.File;

import java.io.FileInputStream;

import java.io.FileOutputStream;

import java.io.IOException;

import java.util.Properties;

public class PropertiesTest {

public static void main(String[] args) throws IOException {

if(countDemo()){

//运行程序代码。

System.out.println("运行程序");

}else{

System.out.println("试用次数已到,请注册!给钱!");

}

}

public static boolean countDemo() throws IOException{

Properties prop = new Properties();

int count = 0;

//配置文件。

File confile = new File("config.txt");

if(!confile.exists())

confile.createNewFile();

FileInputStream fis = new FileInputStream(confile);

//将流中的数据加载到prop中。

prop.load(fis);

//获取配置文件中的次数。

String value = prop.getProperty("count");

if(value!=null){

count = Integer.parseInt(value);

if(count>=5){

// System.out.println("试用次数已到,请注册!给钱!");

return false;

}

}

count++;

System.out.println("运行"+count+"次");

//将具体的键和次数存储到集合中。

prop.setProperty("count", String.valueOf(count));//count+"";

//将集合中的数据写入到文件中持久化。

FileOutputStream fos = new FileOutputStream(confile);

prop.store(fos, "");

fos.close();

fis.close();

return true;

}

}

*********************************************************************************************

6.练习:获取指定目录中的所有内容(包含子目录中的内容)????????????

********************************************************************************************

package cn.itcast.io.p3.file.test;

import java.io.File;

public class FileTest {

public static void main(String[] args) {

File dir = new File("e:\");

showDir(dir,0);

}

//递归。

public static void showDir(File dir,int count){

System.out.println(getSpace(count)+dir.getName());

count++;

File[] files = dir.listFiles();

// if(files!=null)//健壮性判断。

for(File f : files){

if(f.isDirectory()){

showDir(f,count);

}

else

System.out.println(getSpace(count)+f.getName());

}

}

private static String getSpace(int count) {

StringBuilder sb = new StringBuilder();

for(int x=0; x<count; x++){

sb.append("|--");

}

return sb.toString();

}

}

*********************************************************************************************

练习:获取指定目录中的目录????????????

********************************************************************************************

public static void main(String[] args)

{

File b=new File("c:\");

File[] files=b.listFiles();

for (File f : files)

{

System.out.println(f);

}

}

*********************************************************************************************

7.练习:删除一个带内容的文件夹????????????

********************************************************************************************

package cn.itcast.io.p3.file.test;

import java.io.File;

public class FileTest2 {

public static void main(String[] args) {

File dir = new File("e:\\demodir");

removeDir(dir);

}

public static void removeDir(File dir){

File[] files = dir.listFiles();

for(File file : files){

if(file.isDirectory()){

removeDir(file);

}else{

System.out.println(file+":"+file.delete());

}

}

System.out.println(dir+":"+dir.delete());

}

}

*********************************************************************************************

8.对指定目录中的所有(包含子目录)的Java文件的绝对路径写入到一个文本文件中????????????

********************************************************************************************

package cn.itcast.io.p6.test;

import java.io.BufferedWriter;

import java.io.File;

import java.io.FileWriter;

import java.io.FilenameFilter;

import java.io.IOException;

import java.util.ArrayList;

import java.util.List;

public class Test1

{

public static void main(String[] args) throws IOException

{

File dir = new File("E:\\软件开发学习\\传智播客java征途");

FilenameFilter filter = new FilenameFilter()

{

@Override

public boolean accept(File dir, String name)

{

return name.endsWith(".avi");

}

};

List<File> list = new ArrayList<File>();

// 使用递归,过滤并存储。

listAllJavaFile(dir, filter, list);

// 创建目的地文件。

File file = new File(dir, "传智播客java征途视频.txt");

write2File(list, file);

}

// 1.定义一个功能,递归

public static void listAllJavaFile(File dir, FilenameFilter filter,

List<File> list)

{

File[] files = dir.listFiles();

if (files != null)

{

for (File file : files)

{

if (file.isDirectory())// 如果是目录就递归。

{

listAllJavaFile(file, filter, list);

}

else if (filter.accept(dir, file.getName()))// 使用过滤器对指定的目的和文件名进行过滤,符合条件进行存储。

{

list.add(file);

}

}

}

}

private static void write2File(List<File> list, File dest)

{

BufferedWriter bufw =null;

try

{

bufw=new BufferedWriter(new FileWriter(dest));

// 遍历集合

for (File file : list)

{

bufw.write(file.getAbsolutePath());

bufw.newLine();

bufw.flush();

}

}

catch (Exception e)

{

// TODO: handle exception

}finally

{

if(bufw!=null)

{

try

{

bufw.close();

}

catch (IOException e)

{

new RuntimeException("关闭失败");

}

}

}

}

}

*********************************************************************************************

9..需求:将一个段文字数据写入到硬盘上.????????????

********************************************************************************************

public static void main(String[] args) throws IOException

{

FileWriter fw=new FileWriter("g:\\iotest.txt");

fw.write("你好");

fw.flush();

fw.close();

}

来点高级的 ,需求:第一个是加入换行符号,再一个就是接着往这个文件夹里面写东西,而不是覆盖原来的内容。

1,编写程序,判断给定的某个年份是否是闰年。

闰年的判断规则如下:

(1)若某个年份能被4整除但不能被100整除,则是闰年。

(2)若某个年份能被400整除,则也是闰年。

import java.util.Scanner;

class Bissextile{

public static void main(String[] arge){

System.out.print("请输入年份");

int year;    //定义输入的年份名字为“year”

Scanner scanner = new Scanner(System.in);

year = scanner.nextInt();

if (year<0||year>3000){

System.out.println("年份有误,程序退出!");

System.exit(0);

}

if ((year%4==0)&&(year0!=0)||([email protected]==0))

System.out.println(year+" is bissextile");

else

System.out.println(year+" is not bissextile ");

}

}

2,给定一个百分制的分数,输出相应的等级。

90分以上        A级

80~89          B级

70~79          C级

60~69          D级

60分以下        E级

import java.util.Scanner;

class Mark{

public static void main(String[] args){

System.out.println("请输入一个分数");

//定义输入的分数为“mark”,且分数会有小数

double mark;

Scanner scanner = new Scanner(System.in);

mark = scanner.nextDouble();

//判断是否有输入错误。

if(mark<0||mark>100){

System.out.println("输入有误! ");

System.exit(0);

}

if (mark>=90) System.out.println("this mark is grade \‘A\‘ ");

else if (mark>=80) System.out.println("this mark is grade \‘B\‘ ");

else if (mark>=70) System.out.println("this mark is grade \‘C\‘ ");

else if (mark>=60) System.out.println("this mark is grade \‘D\‘ ");

else  System.out.println("this mark is grade \‘E\‘ ");

}

}

3,编写程序求 1+3+5+7+……+99 的和值。

class he{

public static void main(String[] args){

int number = 1;  //初始值1,以后再+2递增上去

int sum = 0;

for ( ; number <100; number+=2 ){ sum += number; }

System.out.println("1+3+5+7+……+99= " +sum);

}

}

4、利用for循环打印 9*9  表?

1*1=1

1*2=2  2*2=4

1*3=3  2*3=6  3*3=9

1*4=4  2*4=8  3*4=12  4*4=16

1*5=5  2*5=10  3*5=15  4*5=20  5*5=25

1*6=6  2*6=12  3*6=18  4*6=24  5*6=30  6*6=36

1*7=7  2*7=14  3*7=21  4*7=28  5*7=35  6*7=42  7*7=49

1*8=8  2*8=16  3*8=24  4*8=32  5*8=40  6*8=48  7*8=56  8*8=64

1*9=9  2*9=18  3*9=27  4*9=36  5*9=45  6*9=54  7*9=63  8*9=72  9*9=81

//循环嵌套,打印九九乘法表

public class NineNine{

public static void main(String[]args){

System.out.println();

for (int j=1;j<10;j++){

for(int k=1;k<10;k++) {   //老师的做法,判断语句里的 k<=j,省去下列的if语句。

if (k>j) break;       //此处用 continue也可以,只是效率低一点

System.out.print(" "+k+"X"+j+"="+j*k);

}

System.out.println();

}

}

}

6、输出所有的水仙花数,把谓水仙花数是指一个数3位数,其各各位数字立方和等于其本身,

例如: 153 = 1*1*1 + 3*3*3 + 5*5*5

class DafodilNumber{

public static void main(String[] args){

System.out.println("以下是所有的水仙花数");

int number = 100;     // 由于水仙花数是三位数,故由100开始算起

int i, j, k;     // i  j  k  分别为number 的百位、十位、个位

for (int sum; number<1000; number++){

i=number/100;  j=(number-i*100)/10;  k=number-i*100-j*10;

sum=i*i*i+j*j*j+k*k*k;

if (sum==number) System.out.println(number+" is a dafodil number! ");

}

}

}

7、求  a+aa+aaa+.......+aaaaaaaaa=?

其中a为1至9之中的一个数,项数也要可以指定。

import java.util.Scanner;

class Multinomial{

public static void main(String[] args){

int  a;      //定义输入的 a

int  howMany;   //定义最后的一项有多少个数字

Scanner scanner = new Scanner(System.in);

System.out.println("请输入一个 1~9 的 a 值");

a = scanner.nextInt();

System.out.println("请问要相加多少项?");

howMany = scanner.nextInt();

int sum=0;

int a1=a;  // 用来保存 a 的初始值

for (int i=1; i<=howMany; i++){

sum+= a;

a = 10*a +a1;   // 这表示a 的下一项

// 每次 a 的下一项都等于前一项*10,再加上刚输入时的 a ;注意,这时的 a 已经变化了。

}

System.out.println("sum="+sum);

}

}

8、求 2/1+3/2+5/3+8/5+13/8.....前20项之和?

class Sum{

public static void main(Sting[] args){

double sum=0;

double fenZi=2.0, fenMu=1.0;    //初始的分子 (fenZi)=2,分母(fenMu)=1

for(int i=1; i<=20; i++){

sum += fenZi / fenMu ;

fenMu = fenZi;           //下一项的分母 = 上一项的分子

fenZi += fenMu;         //下一项的分子 = 上一项的分子加分母

}

System.out.println("sum= "sum);

}

}

9、利用程序输出如下图形:

*

* * *

* * * * *

* * * * * * *

* * * * *

* * *

*

class Asterisk{

public static void main(String[] args){

for (int i=1; i<=13; i+=2){

for(int j=1; j<=i && i+j<= 14; j++){System.out.print("* ");}

System.out.println();  // 换行

}

}

}

11、计算圆周率

PI=4-4/3+4/5-4/7.......

打印出第一个大于 3.1415小于 3.1416的值

class Pi {

public static void main(String[] args){

double pi =0;  //定义初始值

double fenZi = 4;    //分子为4

double fenMu = 1;  //第一个4,可看作分母为1 的分式,以后的分母每次递增2

for (int i = 0; i < 1000000000; i++){ //运行老久,减少循环次数会快很多,只是精确度小些

pi += (fenZi/fenMu) ;

fenZi *= -1.0;    //每项分子的变化是+4,-4,+4,-4 ....

fenMu += 2.0;    //分母的变化是1,3,5,7, ....   每项递加2

}

System.out.println(pi);

}

}

输出结果为pi = 3.1415926525880504,应该不精确

12、输入一个数据n,计算斐波那契数列(Fibonacci)的第n个值

1  1  2  3  5  8  13  21  34

规律:一个数等于前两个数之和

//计算斐波那契数列(Fibonacci)的第n个值

public class Fibonacci{

public static void main(String args[]){

int n = Integer.parseInt(args[0]);

int n1 = 1;//第一个数

int n2 = 1;//第二个数

int sum = 0;//和

if(n<=0){

System.out.println("参数错误!");

return;

}

if(n<=2){

sum = 1;

}else{

for(int i=3;i<=n;i++){

sum = n1+n2;

n1 = n2;

n2 = sum;

}

}

System.out.println(sum);

}

}

//计算斐波那契数列(Fibonacci)的第n个值

//并把整个数列打印出来

public class FibonacciPrint{

public static void main(String args[]){

int n = Integer.parseInt(args[0]);

FibonacciPrint t = new FibonacciPrint();

for(int i=1;i<=n;i++){

t.print(i);

}

}

public void print(int n){

int n1 = 1;//第一个数

int n2 = 1;//第二个数

int sum = 0;//和

if(n<=0){

System.out.println("参数错误!");

return;

}

if(n<=2){

sum = 1;

}else{

for(int i=3;i<=n;i++){

sum = n1+n2;

n1 = n2;

n2 = sum;

}

}

System.out.println(sum);

}

}

13、求1-1/3+1/5-1/7+1/9......的值。

a,求出前50项和值。

b,求出最后一项绝对值小于1e-5的和值。

15、在屏幕上打印出n行的金字塔图案,如,若n=5,则图案如下:

*

***

*****

*******

*********

//打印金字塔图案

public class PrintStar{

public static void main(String args[]){

int col = Integer.parseInt(args[0]);

for(int i=1;i<=col;i++){//i表示行数

//打印空格

for(int k=0;k<col-i;k++){

System.out.print(" ");

}

//打印星星

for(int m=0;m<2*i-1;m++){

System.out.print("*");

}

System.out.println();

}

}

}

16、歌德巴赫猜想,任何一个大于六的偶数可以拆分成两个质数的和

打印出所有的可能

//任何一个大于六的偶数可以拆分成两个质数的和

//打印出所有的可能

public class Gedebahe{

public static void main(String args[]){

int num = Integer.parseInt(args[0]);

if(num<=6){

System.out.println("参数错误!");

return;

}

if(num%2!=0){

System.out.println("参数错误!");

return;

}

Gedebahe g = new Gedebahe();

//1不是质数,2是偶数,因此从3开始循环

for(int i=3;i<=num/2;i++){

if(i%2==0){//如果为偶数,退出本次循环

continue;

}

//当i与num-i都为质数时,满足条件,打印

if(g.isPrime(i) && g.isPrime(num-i)){

System.out.println(i+" + "+(num-i)+" = "+num);

}

}

}

第4章 数组

1. 定义一个int型的一维数组,包含10个元素,分别赋一些随机整数,然后求出所有元素的最大值,

最小值,平均值,和值,并输出出来。

class ArrayNumber{

public static void main(String[] args){

int[] arrayNumber;

arrayNumber = new int[10];

System.out.println("以下是随机的10个整数:");

// 填入随机的 10个整数

for (int i =0; i<arrayNumber.length; i++){

arrayNumber[i] = (int)(100*Math.random());

System.out.print(arrayNumber[i]+" ");

}

System.out.println();

int max = arrayNumber[0];

int min = arrayNumber[0];

int sum = 0;

for (int i =0; i<arrayNumber.length; i++){

if(max < arrayNumber[i])

max = arrayNumber[i];  //求最大值

if(min > arrayNumber[i])

min = arrayNumber[i];   //求最小值

sum += arrayNumber[i];

}

System.out.println("其中Max="+max+",Min="+min+",Sum="+sum+",Avg="+sum/10.0);

}

}

2.定义一个int型的一维数组,包含10个元素,分别赋值为1~10, 然后将数组中的元素都向前移一个位置,

即,a[0]=a[1],a[1]=a[2],…最后一个元素的值是原来第一个元素的值,然后输出这个数组。

3. 定义一个int型的一维数组,包含40个元素,用来存储每个学员的成绩,循环产生40个0~100之间的随机整数,

将它们存储到一维数组中,然后统计成绩低于平均分的学员的人数,并输出出来。

4. (选做)承上题,将这40个成绩按照从高到低的顺序输出出来。

5,(选做)编写程序,将一个数组中的元素倒排过来。例如原数组为1,2,3,4,5;则倒排后数组中的值

为5,4,3,2,1。

6,要求定义一个int型数组a,包含100个元素,保存100个随机的4位数。再定义一个

int型数组b,包含10个元素。统计a数组中的元素对10求余等于0的个数,保存

到b[0]中;对10求余等于1的个数,保存到b[1]中,……依此类推。

class Remain{

public  static void main( String[] args){

int[] a = new int[100];

//保存100个随机4位数到 a 中

for (int i = 0;  i < a.length;  i++){

a[i] = (int) (1000*Math.random());

}

//统计 a 数组中的元素对 10 求余的各个的数目

int[] b = new int[10];

int k,sum;

for (int j = 0;  j < b.length;  j++){

for (k=0,sum=0;  k < a.length;  k++){

if ((a[k])==j) sum++;

}

b[j] = sum;

System.out.printf("b[%d]=%d\n",j,b[j]);

}

}

}

7,定义一个20*5的二维数组,用来存储某班级20位学员的5门课的成绩;这5门课

按存储顺序依次为:core C++,coreJava,Servlet,JSP和EJB。

(1)循环给二维数组的每一个元素赋0~100之间的随机整数。

(2)按照列表的方式输出这些学员的每门课程的成绩。

(3)要求编写程序求每个学员的总分,将其保留在另外一个一维数组中。

(4)要求编写程序求所有学员的某门课程的平均分。

class Student{

public static void main(String[] args ){

int[][] mark = new int[20][5];

// 给学生赋分数值,随机生成

for ( int i = 0;  )

}

}//未完成

8,完成九宫格程序

在井字形的格局中(只能是奇数格局),放入数字(数字由),使每行每列以及斜角线的和都相等

经验规则:从 1 开始按顺序逐个填写; 1  放在第一行的中间位置;下一个数往右上角45度处填写;

如果单边越界则按头尾相接地填;如果有填写冲突,则填到刚才位置的底下一格;

如果有两边越界,则填到刚才位置的底下一格。

个人认为,可以先把最中间的数填到九宫格的最中间位置;再按上面的规则逐个填写,而且

填的时候还可以把头尾对应的数填到对应的格子中。(第 n 个值跟倒数第 n 个值对应,格局上以最中

间格为轴心对应)

这样就可以同时填两个数,效率比之前更高;其正确性有待数学论证(但多次实验之后都没发现有错)。

九宫格的 1 至少还可以填在另外的三个位置,只是接下来的填写顺序需要相应改变;

再根据九宫格的对称性,至少可以有8种不同的填写方式

import java.util.Scanner;

class NinePalace{

public static void main(String[] args){

// 定义 N 为九宫格的行列数,需要输入

System.out.println("请输入九宫格的行列规模(只能是奇数的)");

Scanner n = new Scanner(System.in);

int N;

//判断格局是否奇数 (可判断出偶数、负数 及小数)

double d;

while (true){

d = n.nextDouble();

N = (int)d;

if ((d-N)>1.0E-4||N%2==0||N<0)

{System.out.println("输入出错,格局只能是正奇数。请重新输入");}

else break;

}

//老师的九宫格填写方法

int[][] result = new int[N][N];   //定义保存九宫格的数组

int row = 0; //行 初始位置

int col = N/2; //列 初始位置,因为列由0开始,故N/2是中间位置

for (int i=1;  i<=N*N; i++){

result [row][col] = i;

row--;

col++;

if (row<0&&col>=N){col--;row+=2;} //行列都越界

else if (row<0){ row = N-1;}   //行越界

else if (col>=N){col = 0;}  //列越界

else if (result[row][col] != 0){col--;row+=2;}  //有冲突

}

//打印出九宫格

for (int i=0;  i<N;  i++){

for(int j=0;  j<N; j++){System.out.print(result[i][j]+"\t");}

System.out.println();

}

//我个人的填格方式

int[][] result2 = new int[N][N];  //为免冲突,重新 new 一个数组

result2[N/2][N/2] = (N*N+1)/2;  //先把中间值赋予中间位置

row = 0;   //定义行及列的初始赋值位置。之前赋值的for对两个值有影响,故需重新定位

col = N/2;

for (int i=1; i<=N*N/2; i++){

result2[row][col] = i;

//下面这句是把跟 i 对应的值放到格局对应的位置上

result2[N-row-1][N-col-1] = N*N+1-i;

row--;

col++;

if (row<0){ row = N-1;}   //行越界

else if (col>=N){col = 0;}  //列越界

else if (result2[row][col] != 0){col--;row+=2;}  //有冲突

//这方法不可能出现行列两边都越界的情况,详情需要数学论证

}

System.out.println();

//再次打印出九宫格,以对比验证

for (int i=0;  i<N;  i++){

for(int j=0;  j<N; j++){System.out.print(result2[i][j]+"\t");}

System.out.println();

}

}

}

9,求一个3*3矩阵对角线元素之和

10,打印杨辉三角

11. 约梭芬杀人法

把犯人围成一圈,每次从固定位置开始算起,杀掉第7个人,直到剩下最后一个。

11_2、用数组实现约瑟夫出圈问题。 n个人排成一圈,从第一个人开始报数,从1开始报,报到m的人出圈,剩下的人继续开始从1报数,直到所有的人都出圈为止。对于给定的n,m,求出所有人的出圈顺序。

12. 判断随机整数是否是素数

产生100个0-999之间的随机整数,然后判断这100个随机整数哪些是素数,哪些不是?

public class PrimeTest{

public static void main(String args[]){

for(int i=0;i<100;i++){

int num = (int)(Math.random()*1000);

PrimeTest t = new PrimeTest();

if(t.isPrime(num)){

System.out.println(num+" 是素数!");

}else{

System.out.println(num+" 不是素数!");

}

System.out.println();

}

}

public boolean isPrime(int num){

for(int i=2;i<=num/2;i++){

if(num%i==0){

System.out.println(num+"第一个被"+i+"整除!");

return false;

}

}

return true;

}

}

冒泡排序法:

//按从大到小的排序

int tmp = a[0];

for (int i=0; i < a.length; i++){

for (int j=0; j < a.length - i -1; j++){

if (a[j] < a[j+1]) {

tmp = a[j];

a[j] = a[j+1];

a[j+1] = tmp;

}

}

}

时间: 2024-11-06 07:29:50

【转】java初学基础班经典练手小程序300例(飘叶寻梦整理)的相关文章

【辅助程序】练手小程序:记录外网动态IP地址

练手小程序 程序作用:对IP实时记录: 1.定时获取外网IP,存储在本地文件中: 编写思路: 1)收集获取外网的API接口 http://bbs.125.la/thread-13838979-1-1.html 2)定时执行 http://blog.csdn.net/imzoer/article/details/8699083/ 4)记录本地文件 1 # -*- coding: utf-8 -*- 2 # -*- coding: gbk -*- 3 # Date: 2016/4/27 4 # Cr

练手小程序用了pandas模块和json模块以及time模块

6.16自我总结 功能介绍 程序功能介绍: 商品信息再读取修改买卖均已xlsx格式 且生成购物记录也按/用户名/购买时间.xlsx格式生成 账号密码输入错误三次按照时间进行冻结 用户信息已json格式保存 程序写的过程 先生成功能模块和运行模块 再写功能模块中用到的固定的文件目录全放在setting.py文件中 与商品交互全放在shop.py中 与用户交互全放在user.py中 一些返回界面延迟动画全放在辅助模块中 1.程序设计目录 2.run.py from core.src import r

练手小项目(2)-生活小助手--周公解梦

第一篇 练手小项目(2)-生活小助手--身份证查询 第二篇 练手小项目(2)-生活小助手--星座运势查询 我在想就是第三个药品查询要不要写出来,因为布局还在讨论用什么展示,因为药品有很多展示,我也不知道用什么展示. 这是一个很纠结的事情 我就先写第四个吧 周公解梦 其中代码有点错误我想用for循环进行判断返回数据有几个 但是总是失败,如果有看本篇贴子,解决了,给我留个言,在这篇帖子我只显示一个结果 布局跟简单的说 一个Edittext 获取数据,然后button进行数据提取发送到服务器 返回的数

练手小项目(2)-生活小助手--星座运势查询

上一篇内容 练手小项目(2)-生活小助手 今天星期一.趁着中午的歇息时间把 第二个写出来 星座运势,近期看看极客学院 用聚合数据做了天气预报的视频教程,不好评价他.看他在后面的代码变更那么大,我就知道,后面肯定做不下去,于是.就改代码了.代码变更那么大,有几个人会去理解,还不如我自己写................ 先看布局 点击去就是一个spinner 用几个textview显示查询内容   布局有点丑,主要是给别人做功能,UI我就不考虑 关于UI  我还是要贴下代码.假设你有想法就把他美化

练手小游戏(代码篇之逻辑杂篇

其实呢,我这游戏就有一个简单的AI框架,其他的呢我就一起走了吧,写的还是挺乱的. 比较重要的就是玩家控制类PlayerController~~~ 这里其实我把几个模块都写在一起了,比如输入控制(InputController),动画控制(AnimatorController),还有角色控制 因为就是一个练手的,不用把各个平台的输入信息都整合了,所以InputController就不写了. 我感觉动画控制和角色控制的分界线很微妙,所以也就写一起了~ 走代码备注很全 //人物控制脚本 public

超市购物功能,会员卡功能,会员卡积分查询功能,会员卡奖品功能,自己练手函数程序

函数自己练手一晚上敲的,各位博主可以走过路过可以来瞧瞧,欢迎评价提需求哈哈 total_prices = 0 def chiose(action): '''0是注册功能,1是会员卡系统,2是购物功能,3是会员查找积分功能,4为会员积分兑换功能''' #注册功能 if action == 0: # 注册内容 def register(): while True: print('注册账号'.center(50, "-")) name = input('请输入账号').strip() pri

一个Java写的批量重命名文件小程序

今天学了一下java的File操作,然后乘着兴趣,写了一个可以批量处理文件命名的小程序,小程序还有一些不完美的地方,但胜在有趣.比如可以快捷更改你不想让别人看到的文件之类的...限个人使用,造成数据丢失后果自负哟. import java.io.File; import java.sql.Date; import java.util.Scanner; public class RenameTool { boolean useDefaultName = false; boolean useDefa

没有基础也能写个小程序

文章记录了小程序的设计思路,介绍了使用的技术,描述了提交审核的故事,还提供了最终的完整源码 背景说明 微信小程序自从发布以来就占据着超高的话题热度,一直以来都想开发一款自己的小程序,但苦于不懂前端迟迟没有开始.偶然发现了ColorUI这个开源的小程序组件库,界面好看且提供Demo,心中狂喜马上动手 做个什么小程序呢?想了一圈这半年多一直坚持在写技术文章,为此开通了微信公众号,因为公众号查看文章列表不友好,且不方便在微信以外的渠道传播,我又利用Github Pages搭建了运维咖啡吧网站主页,就想

java练手小项目!要想java学得好,练手项目不可少!

Java小项目,实现电影院的自动售票机 运行界面如下 2.类的设计 该系统中必须包括两个类,类名及属性方法设置如下. 电影类(Movie) ²  名称(name) ²  上映日期(date) ²  票价(price) 售票机类(TicketSell) ²  方法:查询所有电影信息  查询指定电影票价以及上映日期  购买电影票 3.具体要求及推荐实现步骤 1.创建电影类 2.创建售票机类 3.开发售票机类初始化电影方法,查询方法和买票方法. 1)初始化方法initial():  初始化5个电影对象