博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

01Java经典问题

Posted on 2019-08-14 22:18  心默默言  阅读(245)  评论(0编辑  收藏  举报

1.利用Dos输出hello world

建立一个Test.java文件,放在e盘;

public class Test{
    public static void main(String[] args){
        System.out.println("hello world");
    }
}

进入e盘所在目录

注意:javac后面是文件Test.java,而java后面是Test(类名)。

2.Scanner中nextLine()方法和next()方法的区别

import java.util.Scanner;

/*
 * 中间都不带空格
 */
public class ScannerString {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);

        System.out.println("请输入字符串(nextLine):");
        String strNextLine = input.nextLine();

        System.out.println("请输入字符串(next):");
        String strNext = input.next();

        System.out.println("strNextLine:" + strNextLine);
        System.out.println("strNext:" + strNext);
    }
}

以上结果都没有问题。

import java.util.Scanner;

/*
 * nextLine与next都有空格
 */
public class ScannerString {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);

        System.out.println("请输入字符串(nextLine):");
        String strNextLine = input.nextLine();

        System.out.println("请输入字符串(next):");
        String strNext = input.next();

        System.out.println("strNextLine:" + strNextLine);
        System.out.println("strNext:" + strNext);
    }
}

next()方法读取到空白符就结束

nextLine()读取到回车结束也就是“\r”

 

import java.util.Scanner;

/*
 * 第三次:我们将代码中next和nextLine的顺序调整一下,然后再进行测试
 */
public class ScannerString {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        System.out.println("请输入字符串(next):");
        String strNext = input.next();

        System.out.println("请输入字符串(nextLine):");
        String strNextLine = input.nextLine();

        System.out.println("strNext:" + strNext);
        System.out.println("strNextLine:" + strNextLine);
    }
}

 修改顺序后遇到的问题就是因为next()读取到空白符前的数据时结束了,然后把回车“\r”留给了nextLine();所以上面nextLine()没有输出,不输出不代表没数据,是接到了空(回车“/r”)的数据。

3.java异或运算

public class XOR {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        int i = 15;
        int j = 2;
        System.out.println("i^j:"+(i^j));
    }
}

分析上面程序,i=15转成二进制是1111,j=2转成二进制是0010,根据异或的运算规则得到的是1101,转成十进制就是13.

4.利用异或进行加密

 

import java.util.Arrays;
import java.util.Scanner;

public class Password {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Scanner scanner =new Scanner(System.in);
        System.out.println("请输入一个字符串:");
        String password = scanner.nextLine();
        char[] array = password.toCharArray();
        System.out.println(Arrays.toString(array));
        for (int i = 0; i < array.length; i++) {
            array[i] = (char)(array[i]^20000);
        }
        System.out.println("加密结果如下:");
        System.out.println(Arrays.toString(array));
        for (int i = 0; i < array.length; i++) {
            array[i] = (char)(array[i]^20000);
        }
        System.out.println("解密的结果如下:");
        System.out.println(Arrays.toString(array));
    }

}

5.位运算实现乘法

import java.util.Arrays;
import java.util.Scanner;

public class Example {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入一个数字:");
        long number = scanner.nextLong();
        System.out.println("该数字乘以2的运算符为:" + (number << 1));
        System.out.println("该数字乘以4的运算符为:" + (number << 2));
        System.out.println("该数字乘以8的运算符为:" + (number << 3));
        System.out.println("该数字乘以16的运算符为:" + (number << 4));
    }

}

6.实现两个变量的交换,不借助第三个变量

import java.util.Arrays;
import java.util.Scanner;

public class Example {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入一个变量a的值:");
        long a = scanner.nextLong();
        System.out.println("请输入一个变量b的值:");
        long b = scanner.nextLong();
        System.out.println("a=" + a + " " + "b=" + b);
        System.out.println("执行变量交换");
        a = a ^ b;
        b = b ^ a;
        a = a ^ b;
        System.out.println("a=" + a + " " + "b=" + b);
    }

}

① 执行前两个赋值语句:“a=a∧b;”和“b=b∧a;”相当于b=b∧(a∧b)。而b∧a∧b等于a∧b∧b(异或满足交换律,结合律)。b∧b的结果为0,因为同一个数与本身相∧,结果必为0。因此b的值等于a∧0,即a,其值为3。
② 再执行第三个赋值语句:a=a∧b。由于a的值等于(a∧b),b的值等于(b∧a∧b),因此,相当于a=a∧b∧b∧a∧b,即a的值等于a∧a∧b∧b∧b,等于b。
  a得到b原来的值

7.判断是不是闰年

import java.util.Arrays;
import java.util.Scanner;

/**
 * 判断一年是不是闰年:能被400整除或者能被4整除但不能被100整除
 */
public class Example {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入一个年份:");
        int year = scanner.nextInt();
        if (year % 400 == 0 || (year % 4 == 0 && year % 100 != 0)) {
            System.out.println(year + "是闰年");
        } else {
            System.out.println(year + "不是闰年");
        }

    }

}

8.单例模式的应用

class Emepror {

    private static Emepror emperor = null;

    private Emepror() {

    }

    public static Emepror getInstance() {
        if (emperor == null) {
            emperor = new Emepror();
        }
        return emperor;
    }

}

public class Test {
    public static void main(String[] args) {
        System.out.println("创建皇帝对象1");
        Emepror emepror1 = Emepror.getInstance();
        System.out.println("创建皇帝对象2");
        Emepror emepror2 = Emepror.getInstance();
        System.out.println("创建皇帝对象3");
        Emepror emepror3 = Emepror.getInstance();
        System.out.println(emepror1);
        System.out.println(emepror2);
        System.out.println(emepror3);
    }
}

9.构造方法的应用

class Person {
    private String name;
    private String gender;
    private String age;

    public Person() {
        // TODO Auto-generated constructor stub
        System.out.println("使用无参的构造方法创建对象");
    }

    public Person(String name, String gender, String age) {
        this.name = name;
        this.gender = gender;
        this.age = age;
        System.out.println("使用有参的构造方法创建对象");
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getGender() {
        return gender;
    }

    public void setGender(String gender) {
        this.gender = gender;
    }

    public String getAge() {
        return age;
    }

    public void setAge(String age) {
        this.age = age;
    }

}

public class Test2 {
    public static void main(String[] args) {
        Person person1 = new Person();
        Person person2 = new Person("小明", "男", "24");
        System.out.println("员工1的信息:");
        System.out.println("员工姓名:" + person1.getName());
        System.out.println("员工性别:" + person1.getGender());
        System.out.println("员工年龄:" + person1.getAge());
        System.out.println("员工2的信息:");
        System.out.println("员工姓名:" + person2.getName());
        System.out.println("员工性别:" + person2.getGender());
        System.out.println("员工年龄:" + person2.getAge());
    }
}

10.重写equals方法

class Cat {
    private String name;
    private int age;
    private double weight;

    public Cat(String name, int age, double weight) {
        this.name = name;
        this.age = age;
        this.weight = weight;
    }

    @Override
    public boolean equals(Object obj) {
        // TODO Auto-generated method stub
        if (this == obj)
            return true;
        if (obj == null)
            return false;

        if (getClass() != obj.getClass())
            return false;
        Cat cat = (Cat) obj;
        return name.equals(cat.name) && (age == cat.age) && (weight == cat.weight);

    }

    @Override
    public String toString() {
        return "Cat [name=" + name + ", age=" + age + ", weight=" + weight + "]";
    }

}

public class TestCat {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Cat cat1 = new Cat("java", 12, 1.0);
        Cat cat2 = new Cat("python", 12, 8.0);
        Cat cat3 = new Cat("java", 12, 1.0);
        System.out.println("cat1" + cat1);
        System.out.println("cat2" + cat2);
        System.out.println("cat3" + cat3);
        System.out.println("cat1与cat2相同吗?"+cat1.equals(cat2));
        System.out.println("cat1与cat3相同吗?"+cat1.equals(cat3));
    }

}

11.将一个int型数组转化成list类型

package exam;

import java.util.*;

public class Main8 {
    public static void main(String[] args) {
        int[] a= {1,21,3,4};
        Integer[] b = new Integer[a.length];
        for (int i = 0; i < b.length; i++) {
            b[i] = a[i];
        }
        
        List<Integer> list= Arrays.asList(b);
        System.out.println(list);
        System.out.println("最大值为:");
        System.out.println(Collections.max(list)); 
        
        System.out.println("反转");
        Collections.reverse(list);
        System.out.println(list);
        
        System.out.println("打乱");
        Collections.shuffle(list);
        System.out.println(list);
        
        System.out.println("排序");
        Collections.sort(list);
        System.out.println(list);
        
        System.out.println("复制一个集合");
        List<Integer> copyList = new ArrayList<>();
        copyList.addAll(list);
        System.out.println(copyList);
        
    }
}