java编程题练习

/*
 * 字符串替换程序
 * 将输入的字符串中空格替换成*号
 * 将 ,(逗号替换成@符号)
 */
public class ReplaceBlanks
{
    public static void main(String[] args)
    {
        String   str = "Hello  world  hello,China" ;

        System.out.println(replaceBlanks(str));
    }

    public static  String replaceBlanks(String  input)
    {
        if(input == null)
        {
            return  null;
        }

        StringBuffer   output = new StringBuffer();
        for (int i = 0; i < input.length(); i++)
        {

            if(input.charAt(i) == ' ')
            {
                output.append("*");
            }
            else if(input.charAt(i) ==',')
            {
                output.append("@");
            }
            else
            {
                output.append(String.valueOf(input.charAt(i))); 
            }
        }

        return new String(output);
    }

}

————————————————————

/*
 * 一个二维数组,每一行从左到右递增,每一列从上到下递增。输入一个二维数组和一个整数,
 * 判断数组中是否包含这个整数
 */
public class FindNumberInArray
{
    //在二维数组中查找特定元素的方法
    public static  boolean  findNumberInArray(int array[][] ,int  number)
    {
        //如果数组为空
        if(array == null)
        {
            return false;
        }

        int column=array[0].length-1;// 获得数组列下标上限
        int row = 0; // 从第一行开始遍历
        while(row<array.length &&  column>0)  //array.length是数组的行数
        {
            if(array[row][column] == number)
                return true;
            if(array[row][column]  >  number)
                column --;
            else
                row++; //遍历下一行
        }
        return  false;  //都没有找到,返回false

    }


    //测试方法
    public static void main(String[] args)
    {
        int array[][]= new int[4][4];
        array[0][0] = 1;
        array[0][1] = 2;
        array[0][2] = 3;
        array[0][3] = 5;

        array[1][0] = 2;
        array[1][1] = 3;
        array[1][2] = 4;
        array[1][3] = 5;

        array[2][0] = 3;
        array[2][1] = 4;
        array[2][2] = 5;
        array[2][3] = 6;

        array[3][0] = 4;
        array[3][1] = 5;
        array[3][2] = 6;
        array[3][3] = 7;

        System.out.println(findNumberInArray(array, 6));


    }

}


/*
 * 输入一个整数数组,实现一个函数来调整该数组中数字的顺序
 * 所有奇数位于数组的前半部分,所有偶数位于数组后半部分
 */
public class Order
{
    //测试方法
    public static void main(String[] args)
    {
        Order   or= new Order();
        int array[] ={2,4,1,4,5,67,5,3,2,34,4,5,5,3,33,2,2,2,4,6,76,8,87,6,65,90};
        or.order(array);
        for (int i = 0; i < array.length; i++)
        {
            System.out.print(array[i]+"  ");
        }
    }

    public  void order(int[]  array)
    {
        if(array == null &&  array.length == 0)
            return;
        int start = 0;//数组第一个元素的下标
        int end = array.length - 1;  //数组最后一个元素的下标
        while(start < end)
        {
        //这个while循环从第一个元素开始检查这个数是不是偶数
        while(start < end && !isEvenNumber(array[start])) //是奇数
        {
            start++; //是奇数,就不交换,在原来的位置
        }
        //这个while循环从最后一个元素开始检查这个数是不是偶数
        while(start<end  && isEvenNumber(array[end]))//是偶数
        {
            end --; //是偶数,不用交换,接着检查下一个元素
        }

        //否则执行交换
        if(start< end)
        {
            int temp = array[start];
            array[start] = array[end];
            array[end] = temp;
        }


        }
    }
    //判断一个数是不是偶数的方法
    public  boolean isEvenNumber(int  n)
    {
        return  n % 2 == 0;
    }

}

输入一个字符串,列出所有可能的组合。


import java.util.ArrayList;
import java.util.List;

public class  StringList
{
    public static void main(String[] args)
    {
        String s = "bcd";   //原来的字符串
        List<String>   result = list(s," ");  //调用list方法
        System.out.println(result.size());  
        System.out.println(result);
    }
    /*
     * 列出所有基础字符串的组合,放入result  
     * base 以此字符串为基础字符串,进行选择性组合
     * buff所求字符串临时结果
     * result  存放结果
     */
    public  static List<String>   list(String base,String buf)

    {
        List<String>  result = new  ArrayList<>(); 
        if(base.length() <=0)  
        {
            result.add(buf); 
        }
        for (int i = 0; i < base.length(); i++)  
        {
            List<String>     temp   =   list(new  StringBuffer(base).deleteCharAt(i).toString(), buf+base.charAt(i));
            result.addAll(temp);
        }
        return  result;

    }

}

——————————————————————


/*
 * 键盘输入一个字符串,并将其倒序输出来
 */
import java.util.Scanner;

public class ReverseString
{
    public static void main(String[] args)
    {
        System.out.println("请输入一个字符串,本程序会将其倒序输出:");
        Scanner   sc = new Scanner(System.in);
        String  str = sc.nextLine();   //能够得到带空格的字符串 。nextLine()将回车作为终止符
        //String  str = sc.next();  不能得到带空格的字符串  将回车 空格  tab键都作为终止符

        System.out.println(reverseString(str));

    }

    public static  String  reverseString(String  str)
    {
        if(str == null)//输入字符串为空,则返回null
        {
            return  null;
        }

        else
        {
            String  result = "";  //存放结果的变量
            for(int i = 0;i<str.length();i++)
            {
                //从字符串最后一个字符开始,依次得到每个字符,并将其加在结果变量后面
                char  temp = str.charAt(str.length()-1-i);
                result = result+temp;
            }
            return  result;
        }


    }

}


——————————————————————————————————————————————————


import java.util.Scanner;

/*
 * 在数组里存放一组数据,通过键盘输入一个数,通过折半查找的方法确定输入的数是否在这个数组中
 */
public class BinarySearch
{
    //将全局变量设置为静态,就不用担心被其他文件使用
    public static int array[] = 
        {3,5,3,2,4,332,2,2,2,4,44,3,3,45,22,33,90,8,76,665,44,3,444,33,44,543,34,65};
    public static int counter = 0;//用来记录查找到用的次数
    public static int  length = array.length;


    public static void main(String[] args)
    {
        System.out.println("请输入你要查找的数:");
        Scanner  sc= new Scanner(System.in);
        int keyValue = sc.nextInt();
        BinarySearch  bs = new BinarySearch();
        boolean  result = bs.binarySearch(keyValue);
        if(result)
        {
            System.out.println("使用折半查找:"+counter+"次才找到");
        }
        else
        {
            System.out.println("没有找到数据");
        }
    }

    //折半查找的方法
    public static   boolean  binarySearch(int keyValue)
    {
        int left =0 ;  //左边界
        int  right = length -1; //  右边界
        int middle;   //中间
        while(left <= right)   
        {
            //由于输入的数据可能不是有序的,所以需要使用冒泡排序先对其进行排序
            for(int i = 0;i<length;i++)
                for(int j = 0;j<length-1-i;j++)
                {
                    if(array[j]>array[j+1])
                    {
                        int  temp = array[j];
                        array[j] = array[j+1];
                        array[j+1] = temp;

                    }
                }
            middle = (left+right) /2;
            if(keyValue < array[middle])
            {
                right = middle-1;// 调整右边界

            }
            else if(keyValue >array[middle])
            {
                left=middle+1; //调整左边界
            }
            else if(keyValue == array[middle])  //找到了
            {
                System.out.println("找到了要查找的数!");
                return  true;
            }
            counter++;

        }
        return  false;

    }

}







————————————————————————————————


import java.util.HashSet;
import java.util.Iterator;
import java.util.Scanner;
import java.util.Set;

import javax.security.auth.Subject;

/*
 * 输入一个字符串,统计每个字符出现的次数。
 * 分析:一个字符串中同一个字符可能出现多次。
 * 我们可以遍历字符串,并把字符存入set集合中。因为集合不能存放相同的元素
 * 这样就可以得到字符的种类数
 */
public class CountString
{
    public static void main(String[] args)
    {
        System.out.println("请输入一个字符串,本程序会统计出每种字符出现的次数:");
        Scanner sc = new Scanner(System.in);
        String  str = sc.nextLine();  //nextLine()可以得到空格,空格也要算作一种字符

        //new 一个集合对象,用来存放字符的种类。因为set里面不能存放相同的元素
        Set<String>   set = new HashSet<String>(); //HashSet  可以存放null ;线程不安全
        for(int i =0;i<str.length();i++)
        {
            //使用截取字符串的这个方法,其返回begin到end-1之间的字符串。
            String  s= str.substring(i, i+1);//也就是返回处于i位置的字符
            set.add(s); //将得到的字符加入到集合中
        }//循环完成后,就将所有不同种类的字符放入里集合中

        Iterator  it = set.iterator(); //遍历集合
        while(it.hasNext()) //hasNext()方法 判断是否有下一个元素
        {
            String  s1= (String)it.next(); // next()返回下一个元素
            int  k =0;  //用来存放某种字符的个数
            for(int j =0;j<str.length();j++)
                if(s1.equals(str.substring(j,j+1)))
                {
                    k++;
                }
            System.out.println(s1+"有"+k+"个");
        }
    }

}

———————————————————————————————————————————————

/*
 * 键盘输入一个字符串,然后按照字母表顺序对其进行排序
 */
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

public class StringSort
{
    public static void main(String[] args)
    {
        System.out.println("请输入一个字符串,本程序将会安字母表排序后再输出来:");
        Scanner   sc = new Scanner(System.in);
        String  str = sc.nextLine();

        List  list  = new ArrayList();
        for(int i = 0;i<str.length();i++)
        {
            //截取每个字符。substring(begin.end)本来是截取benig到end-1的字串
            //那么substring(i,i+1)就表示截取第i个字符
            String  s = str.substring(i, i+1); 
            list.add(s);  //将截取的字符放进集合再
        }
        java.util.Collections.sort(list);  //直接调用操作集合的工具类里的sort()方法
        System.out.println(list);
    }

}








/*
* 要求:判断101到200之间的数 x 有多少个素数。
* 素数(质数):只能被1和它本身整除的数成为素数。
* 方法1:让x依次被2,3,…m-1除。 可行,代价高
* 方法2:让x依次被2,3,…m/2除。可行,代价减少
* 方法3:让x依次被2,3…sqrt(x)除。sqrt(x)为x的平方根 最优方案。
*/

public class PrimeNumber
{
public static void main(String[] args)
{
int counter = 0;
for(int i = 101;i<200;i+=2) //偶数不用判断,肯定不是素数
{
boolean result = false;
for(int j= 2;j


import java.util.Scanner;

/*
 * 求如: a+aa+aaa+aaaa+aaaaa ......的值,其中a是一个数字。例如2+22+222+2222+22222....
 * 到底有几个数相加由键盘输入决定。
 */
public class SumTest
{
    public static void main(String[] args)
    {
        //需要三个变量  存储数字的变量 digit ;  存储项数的变量number  以及求和 sum.
        Scanner   sc = new Scanner(System.in);
        System.out.println("请输入你想要计算的数字(0-9之间):");
        int digit = sc.nextInt();
        System.out.println("请输入你想要计算的项数:");
        int number = sc.nextInt();
        int sum = 0;
        for(int i =0;i<number;i++)
        {
            sum =sum+digit;
            digit = digit*10+digit;
        }
        System.out.println("求出和为"+sum);

    }

}




————————————————————————

/*
* 一个数如果恰好等于它的所有因子之和,这个数就被成为完数 。例如 6=1+2+3.
* 编程找出1000以内的所有完数
*/
public class PerfectNumber
{

public static void main(String[] args)
{
    System.out.println("本程序的目的是找出1000以内的完数,结果是:");

    for(int i =1; i <1000;i++)
    {
        int sum = 0;  //用来存储所有因子和的变量
        for(int j =1;j <=  i /2 ;j++)
        {
            if(i % j == 0) // 找出所有因子
            {
              sum =sum+j;    //将因子求和
            }
        }

        if(sum ==i) // 比较所有因子和与i的大小
        {
            System.out.print(i+"  ");
        }

    }

}

}






____________________________________________

/*
 * 有 1  2  3  4 四个数字,能组成多少个无重复数字的三位数。
 * 打印出这些三位数
 */
public class GroupNumber
{
    public static void main(String[] args)
    {
        int count = 0;
        for(int a=1; a<5 ;a++)
        {
            for(int b=1;b<5;b++)
            {
                for(int c=1;c<5;c++)
                {
                    if(a != b && a != c &&  b!=c )
                    {
                        count ++;
                        System.out.println(a*100 + b*10 + c);
                    }
                }
            }
        }
        System.out.println("能够组成无重复数字的三位数个数为:"+count+"个");
    }

}


/*
 * 一个整数,当它加上100后是一个完全平方数,在加上168之后又是一个完全平方数
 * 求这个整数
 */
public class Integertest
{
    public static void main(String[] args)
    {
        //这个整数的范围应该不会超过10000
        for(int i =1;i<10000;i++)
        {
            if(Math.sqrt(i+100) %  1 ==0  && Math.sqrt(i+268) % 1==0)
            {
                System.out.println(i+"是一个完全平方数");
            }
        }
    }

}

——————————————————————————————————





import java.util.Scanner;

/*
 * 输入三个整数  x  y  z ,再把这三个数按照从小到大输出。
 */
public class SortNumber
{
    public static void main(String[] args)
    {
        Scanner   sc =new Scanner(System.in);
        System.out.println("请输入第一个整数:");
        int  a = sc.nextInt();
        System.out.println("请输入第二个整数:");
        int b =sc.nextInt();
        System.out.println("请输入第三个整数:");
        int c = sc.nextInt();

        if(a >b )
        {
            int temp = a;
            a=b;
            b =temp;
        }
        if(a > c)
        {
            int temp =a;
            a=c;
            c =temp;
        }
        if(b > c)
        {
            int temp =c;
            c=b;
            b =temp;
        }

        System.out.println("三个数字由小到大为:"+ a+"  "+b+"  "+c);
    }

}

————————————————————————————————





/*
 * 输出 9 * 9 乘法表
 */
public class MultiplyTable
{
    public static void main(String[] args)
    {
        for(int i= 1;i<10 ; i++)
        {
            for(int j =1;j<=i ;j++)
            {
                System.out.print(i+"*"+j+"="+i*j+" ");
                if(i*j<10)
                {
                    System.out.print(" ");
                }
            }
            System.out.println();
        }
    }

}

————————————————————————————————————


/*
 * 有一组数列  2/1  3/2  5/3  8/5  13/8   21/ 23.
 * 求出这个数列的前20项之和
 * 
 */
public class Sum
{
    public static void main(String[] args)
    {
        int x = 2; //分母
        int y = 1; //分子
        double sum =0;
        for(int i=1;i<=20;i++)
        {
            sum =  sum  + (double) x / y;
            int t = y;
            y= x;
            x = y+t;
        }
        System.out.println("前20项之和是:"+sum);
    }

}

——————————————

import java.util.Scanner;

/*
 * 输入任意一个数n,求 1! + 2! +3!+....+ n! =?
 */
public class Factorial
{
    public static void main(String[] args)
    {
        System.out.println("请输入一个整数,本程序将会求出1!+2!+..+n! 的值:");
        Scanner   sc = new Scanner(System.in);
        Long number = sc.nextLong();
        long sum =0;  //求和的变量
        long fac = 1 ;  //每一项阶乘的变量
        for(int i=1 ;i <= number; i++)
        {
            fac = fac * i;
            sum = sum+ fac;
        }

        System.out.println("阶乘的和为:"+sum);
    }

}







——————————————————————————————————————


import java.util.Scanner;

/*
 * 输入一个不超过5位的正整数,求出这个数是几位数,并且将其逆序输出。
 */
public class ReverseNumber
{
    public static void main(String[] args)
    {
        System.out.println("请输入一个不超过5位的整数:");
        Scanner  sc =  new Scanner(System.in);
        Long  number = sc.nextLong();
        //要计算出有多少位,可以将数字转换成字符串,再将字符串保存在字符数组里
        String  str = Long.toString(number);
        char[]  ch = str.toCharArray();
        System.out.println("这是一个"+ch.length+"位数");

        //将其逆序输出
        for(int i= ch.length-1;i>=0;i--)
        {
            System.out.print(ch[i]);
        }


    }


}

————————————————————————


import java.awt.image.RescaleOp;
import java.util.Scanner;

/*
 * 输入一个数,判断其是不是回文数
 * 即判断一个数第一位是否与最后一位相同;第二位是否和倒数第二位相同,依次类推
 */
public class Palindrome
{
    public static void main(String[] args)
    {
        System.out.println("请输入一个正整数,本程序可以判断其是否为回文数:");
        Scanner  sc = new Scanner(System.in);
        Long  number = sc.nextLong();

        //需要将这个数转换为字符串
        String  str = Long.toString(number);
        char[]   ch = str.toCharArray();// 存在字符数组中
        boolean result =true;
        for(int i =0; i<ch.length / 2;i++)
        {
            if(ch[i] != ch[ch.length-1-i])
            {
                 result = false;
            }
        }

        if(result ==true)
        {
            System.out.println(number+"是一个回文数");
        }
        else
        {
            System.out.println(number+"不是一个回文数");
        }
    }

}

————————————————————————


import java.util.Scanner;

/*
 * 输入一个数组 ,然后将其逆序输出
 */
public class ReverseArray
{
    public static void main(String[] args)
    {
        System.out.println("请输入多个正整数,输入-1 表示输入结束:");
        Scanner  sc = new Scanner(System.in);
        int[]  array = new int[20];
        int i=0,j;
        do
        {
            array[i] =sc.nextInt();
            i++;
        }while(array[i-1] != -1);

        System.out.println("你输入的数组为:");
        for( j = 0;j<i-1;j++)
        {
            System.out.println(array[j]+"   ");
        }

        System.out.println("数组的逆序输出是:");
        for(j=i-2;j>=0;j--)
        {
            System.out.println(array[j]+"   ");
        }
    }

}

import java.util.Scanner;

/*
 * 输入一个位数较大的数字,截取这个数字的从左到右的3-5位
 */
public class SubNumber
{
    public static void main(String[] args)
    {
        System.out.println("请输入一个数字,至少大于5位,本程序将会截取这个数字的3-5位:");
        Scanner  sc = new Scanner(System.in);
        Long number = sc.nextLong();

        //将数字转换成字符串
        String str = Long.toString(number);
        System.out.println("截取这个数字的3-5位为:"+str.substring(2, 5)); //特别注意:substring(begin,end)是前包含,后不包含

    }

}
数组章节作业 1、将一个数组中的元素倒排过来,不能新开一个数组的临时存储空 间,只能在原数组上改。 2、写一个类用来模拟栈这种数据结构,要求底层 使用数组存储数据, 并给出相应的进栈和出栈的方法。MyStack int arr[]; int count;//栈中元素个数 public MyStack(int n){ arr = new int[n]; } boolean push(int num){ if(count==arr.length){} arr[count++]=num; } int pop(){ if(count==0){ return -1;} return arr[--count]; } 3、实现在一个数组指定位置添加元素和删除元素的功能。 1、数组容量问题? 2、添加元素前后数组中元素的变化 3、删除元素前后数组中元素的变化 面向对象章节作业 1,写一个类,名为Animal,该类有两个私有属性, name(代表动物的名字),和legs(代表动物的腿的条 数)。并提供个两构造方法,一个无参,默认给name 赋值为AAA,给legs赋值为4;另一个需要两个参数, 分别用这两个参数给私有属性赋值。该类还有两个重载的move()方法,其中一个无参,在屏幕上输出一行文字: XXX Moving!!(XXX为该动物的名字);另一个需要一个int参数n,在屏幕上输出n次 XXX Moving!! 2,写一个类Person,包含以下属性:String name; int age; boolean gender; Person partner。 为Person类写一个marry(Person p)方法,代表当前 对象和p结婚,如若可以结婚,则输出恭贺信息, 否则输出不能结婚原因。要求在另外一个类中写一 个主方法,来测试以上程序。(下列情况不能结婚: 结婚年龄,男<24,女<22;3,某一方已婚) 3,写一个类,名为Animal,该类有两个私有属性,name(代表动物的名字),和legs(代表动物的腿的条数);要求为两个私有属性提供public 的访问方法。并提个两构造方法,一个无参,默认给name赋值为AAA,给legs赋值为4;另一个需要两个参数,分别用这两个参数给私有属性赋值。要求在第一个构造方法中调用第二个构造方法。该类还有两个重载的move()方法,其中一个无参,在屏幕上输出一行文字: XXX Moving!!(XXX为该动物的名字);另一个需要一个int参数n,在屏幕上输出n次 XXX Moving!! 4,写一个类Fish,继承自Animal类,并提供一个构造方法,该构造方法需要一个参数name,并给legs赋默认值0;该类还要求覆盖Animal类中的无参move()方法,要求输出:XXX Swimming!! 5,写一个类Bird,继承自Animal类,并提供一个构造方法,该构造方法需要一个参数name,并给legs赋默认值2;该类还要求覆盖Animal类中的无参move()方法,要求输出:XXX Flying!! 6,写一个类Zoo,要求分别生成若干个Animal,Fish和Bird。并调用他们的属性和方法。 7,写Shape类,要求如下: 1.int类型属性x和y,分别表示图形的中心点坐标 2.无参构造器 3.构造器,对x和y进行初始化 4.draw()方法,输出"Shape draw" 写Circle类,继承Shape类,要求如下 1.double类型属性r,表示圆的半径 2.无参构造器,将r初始化为1.0 3.构造器,对r进行初始化 4.构造器,对x、y、r进行初始化 5.draw()方法,输出"draw in circle"和x,y,r的值 写Rectangle类,继承Shape类,要求如下 1.double类型属性height和width,表示矩形的高和宽 2.无参构造器,将height和width都初始化为1.0 3.构造器,对height和width进行初始化 4.构造器,对x、y、height、width进行初始化 5.draw()方法,输出"draw in rectangle"和x,y,height,width的值 使用ShapeTest类测试以上代码。 8,某公司的雇员分为以下若干类: Employee:这是所有员工总的父类,属性:员工的姓名,员工的生日月份。方法:getSalary(int month) 根据参数月份来确定工资,如果该月员工过生日,则公司会额外奖励100元。 SalariedEmployee:Employee的子类,拿固定工资的员工。属性:月薪 HourlyEmployee:Employee的子类,按小时拿工资的员工,每月工作超出160小时的部分按照1.5倍工资发放。属性:每小时的工资、每月工作的小时数 SalesEmployee:Employee的子类,销售人员,工资由月销售额和提成率决定。属性:月销售额、提成率 BasedPlusSalesEmployee:SalesEmployee的子类,有固定底薪的销售人员,工资由底薪加上销售提成部分。属性:底薪。 写一个程序,把若干各种类型的员工放在一个Employee数组里,写一个函数,打印出某月每个员工的工资数额。注意:要求把每个类都做成完全封装,不允许非私有化属性。 容器类章节作业 1、写MyStack类,实现栈功能。在类中使用ArrayList保存数据。 2、使用TreeSet和Comparator,写TreeSetTest1 要求:对TreeSet中的元素"HashSet"、"ArrayList"、"TreeMap"、"HashMap"、"TreeSet"、"LinkedList"进行升序和倒序排列 3、使用TreeSet和Comparator,写TreeSetTest2 要求:对TreeSet中的元素1,2,3,4,5,6,7,8,9,10进行排列,排序逻辑为奇数在前偶数在后,奇数按照升序排列,偶数按照降序排列 4、使用TreeSet和Comparator,写TreeSetTestInner 要求: 对TreeSet中的元素"HashSet"、"ArrayList"、"TreeMap"、"HashMap"、"TreeSet"、"LinkedList"进行升序和倒序排列 1. 使用匿名内部类实现 2. 使用静态内部类实现
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值