【转】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)||(year@0==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;

        }

    }

}

 

posted @ 2015-09-06 15:33  小东瓜刨冰  阅读(4101)  评论(0编辑  收藏  举报