Java基础
1.输入
int foot;
double inch;
Scanner in = new Scanner(System.in);//输入
foot = in.nextInt();//英尺
inch = in.nextDouble();//英寸
System.out.println(foot);
System.out.println(inch);
System.out.println((int)((foot+inch/12.0)*0.3048*100)+"cm");//强制将结果转换为整数
int a=6;
double b=5.0;
System.out.println(a>=b);//输出为true
2.嵌套的判断语句
Scanner in = new Scanner(System.in);
int x,y,z; int max;
System.out.print("请输入三个数:");
x = in.nextInt();
y = in.nextInt();
z = in.nextInt();
if(x>y)//嵌套
{
if(x>z) max=x;
else max=z;
}
else {
if(y>z) max=y;
else max=z;
}
System.out.println(max);
3.switch语句和break的使用
Scanner in = new Scanner(System.in);
int type = in.nextInt();
switch(type) {
case 1:
case 2:System.out.println("你好");
case 3:System.out.println("再见");break;
case 4:System.out.println("四米马赛");break;
}
输入:2,输出结果为你好/再见
4.while、do-while循环语句
int balance = 0;
while(true){ //循环语句
System.out.println("请投币: ");
Scanner in = new Scannera(System.in);
int amount = in.nextInt();
if( amount >= 10 ) {
System.out.println("*****************");
System.out.println("*Java城际铁路专线*");
System.out.println("* 无指定座位票 *");
System.out.println("* 票价:10 元 *");
System.out.println("*****************");
System.out.println("找零:" + (amount-10));
}
else {
balance = balance + amount;
if( balance < 10) {
System.out.println("您还需再投入"+(10-amount) +"元");}
else{
System.out.println("*****************");
System.out.println("*Java城际铁路专线*");
System.out.println("* 无指定座位票 *");
System.out.println("* 票价:10 元 *");
System.out.println("*****************");
System.out.println("找零:" + (balance-10));
balance = 0;
}
}
}
while语句是先判断是否满足循环条件再执行
int number = in.nextInt();
int count = 0;
do //先执行再判断是否满足循环条件
{
number = number / 10;
count = count +1;
System.out.println("number="+number+";count="+count);
} while(number > 0); //注意分号
System.out.println(count);
do-while语句是先执行再判断是否满足循环条件
5.猜随机产生数
Scanner in = new Scanner(System.in);
//猜随机产生数
int number = (int)Math.random()*100+1;// [0,1)-->[0,100)-->[1,100] 计算机随机产生1~100的数字
int count = 0;
int a;
do{
a = in.nextInt();
count = count + 1;
if(a>number)
{
System.out.println("偏大");
}
else if(a<number)
{
System.out.println("偏小");
}
}while(a!=number);
System.out.println("恭喜你猜对了,你猜了"+count+"次");
6.求平均数
int number;
int sum = 0;
double x;
number = in.nextInt();
int count = 0;
while(number != -1){
sum = sum + number;
count = count + 1;
number = in.nextInt();
}
x = sum / count;
if(count > 0) {
System.out.println("平均数为:"+ x +";共有"+count+"个数相加");
}
7.整数分解
int number;
number = in.nextInt();
int result = 0;
int x;
do {
x = number % 10;
result = result*10 + x;
System.out.println(x);
number = number / 10;
}while(number > 0);
System.out.println();
System.out.println(result);
8.阶乘 for循环
int n = in.nextInt();
int factor = 1;
for(int i=1; i<=n; i++) {
factor = factor * i;
}
System.out.println(factor);
9.判断素数
int n = in.nextInt();
int x = 1;//0、1做判断使用
for( int i=2; i<n; i++) {
if( n%i == 0 ) {
x = 0;
System.out.println(n+"不是素数");
break;//跳出循环
}
}
if( x == 1) {
System.out.println(n+"是素数");
}
10.输出100以内的素数or输出前50个素数 嵌套循环
int amount = 0;
for( int n=2; n<1000; n++) {
int x = 1;
for( int i=2; i<n; i++) {
if( n%i == 0) {
x = 0;
break;
}
}
if(x==1) {
System.out.print(n+" ");
amount = amount + 1;
if(amount == 50) break;
}
}
11.凑硬币
int amount = in.nextInt();
OUT://标号。 给整个循环标号,起名字。
for(int one = 0; one <= amount; ++one) {
for(int five = 0; five <= amount/5; ++five) {
for(int ten = 0; ten <= amount/10; ++ten) {
for(int twenty = 0; twenty <= amount/20; ++twenty) {
if(one + five*5 + ten*10 + twenty*20 == amount) {
System.out.println(one+"张1元,"+five+"张5元,"+ten+"张10元"+twenty+"张20元。");
break OUT;
}
}
}
}
}
12.求和计算
// 1- 1/2 + 1/3 -1/4 + ... 求和
int n = in.nextInt();
double sum = 0.0;
int sign = 1;
for(int i =1; i<=n; i++, sign = -sign) { //for循环中逗号间隔可执行多条语句
sum = sum + sign*1.0/i;//浮点数与浮点数相加,1必须取1.0
}
System.out.printf("%.2f", sum);//取两位小数
13.求最大公约数
int a = in.nextInt();
int b = in.nextInt();
int x= 1;
for(int i = 2; i<=a && i<=b; i++) {
if( a%i ==0 & b%i == 0) {
x = i;
}
}
System.out.println(a+"和"+b+"的最大公约数是"+x);
14.辗转相除法求最大公约数
//1.如果b等于0,计算结束,a就是最大公约数;
//2.否则,计算a除以b的余数,让a等于b,而b等于那个余数;
//3.回到第一步。
int a = in.nextInt();
int b = in.nextInt();
int oa = a,ob = b;
while( b!= 0) {
int r = a % b;
System.out.println(a+","+b+","+r);
a = b;
b = r;
}
System.out.println(oa+"和"+ob+"的最大公约数是"+a);
15.数组 求平均数并输出大于平均数的数
int x;
int[] numbers = new int[100];//定义一个int型数组变量,变量名为numbers
double sum = 0;
int count = 0;
x = in.nextInt();
while( x != -1) {
numbers[count] = x;//给数组中的元素赋值
//number[0、1、2、3...] = x; 将每一个x都记录在一个数组中
sum = sum + x;
count = count + 1;
x = in.nextInt();
}
if( count > 0) {
System.out.println("平均值为:"+sum/count);
double average = sum/count;
for(int i = 0; i<count; i++) {
if(numbers[i] > average) {
System.out.println("大于平均值的数有:"+numbers[i]);
}
}
}
16.确定数组大小后创建数组/防止出错
double sum =0;
int count = in.nextInt();
if(count > 0) {
int[] numbers = new int[count];
for(int i = 0; i<count; i++) {
numbers[i] = in.nextInt();
sum = sum + numbers[i];
}
double average = sum/count;
System.out.println("平均值为:"+average);
for (int i =0; i<numbers.length; i++) { //数组名.length指数组长度
if(numbers[i] > average) {
System.out.println("大于平均值的数有:"+numbers[i]);
}
}
}
17.数组名只是数据的管理者而不是数据的所有者
int[] a = new int[10];
a[0] = 5;
int[] b = a;//数组变量赋值
b[0] = 16;
System.out.println(a[0]); //数组名只是数组的管理者而不是数据的所有者
输出结果为16
18.创建一个与数组a中数据相同的新数组
int[] a = {1,2,3,4,5};
int[] b = new int[a.length];
for( int i = 0; i<b.length; i++) { //创建一个与原数组相同的数组
b[i] = a[i];
}
for(int i = 0; i<b.length; i++) {
System.out.print(b[i]);
}
System.out.println();
boolean isEqu = true;//判断数组中各元素是否相等
for(int i=0; i<b.length; i++) {
if(a[i] != b[i]) {
isEqu = false;
break;
}
}
System.out.println(isEqu);//两个数组的每个元素都相等
System.out.println(a==b);//每个元素相等不代表两个数组相等
注:两个数组数据相等,并不等于两个数组相等
19.统计投票
int x;
int[] numbers = new int[10];//系统默认数组中各个元素初始值为0
x = in.nextInt();
while( x!= -1) {
if (x>=0 && x<=9) {
numbers[x]++;
}
x = in.nextInt();
}
for (int i = 0; i<numbers.length; i++) {
System.out.println(i+":"+numbers[i]);
}
20.遍历数组 线性搜索
int[] data = {1,2,3,4,5};
int k = -1;//做判断使用
while(true) {
System.out.println("请输入:");
int x = in.nextInt();
for(int i = 0; i<data.length; i++) {
if(x == data[i]) {
k = i;
//break;
}
}
if( k != -1) {
System.out.println(x+"是第"+(k+1)+"个");
}
else {
System.out.println(x+"不在其中");
}
}
21.for-each循环 判断x是否在数组中
int[] data = {1,2,3,4,5};
int x = in.nextInt();
boolean found = false;
for( int k : data ) //for-each循环 data赋值给k
{
if(x==k){
found = true;
//break;
}
}
if (found) {
System.out.println(x+"在其中");
}
else {
System.out.println(x+"不在其中");
}
for循环中的冒号指迭代,即不断从data里取其元素赋值给临时变量k
22.输出并存放前50个素数
int[] data = new int[50];
data[0] = 2;
int count = 1;
OUT: //循环命名
for(int x = 3; count<50; x++) {
for(int i = 0; i<count; i++) {
for(int j = 0; j<count; j++){
if( x % j == 0) {
continue OUT; //直接跳转到最外层循环
}
}
}
data[count++] = x;
}
for(int k:data) {
System.out.print(k+" ");
}
23.筛选法求出100以内的所有素数
boolean[] isPrime = new boolean[100];
for(int i=0; i<isPrime.length; i++) {
isPrime[i] = true;
}
for(int i=2 ;i<isPrime.length; i++) {
if(isPrime[i]) {
for(int k=2; i*k<isPrime.length; k++) {
isPrime[i*k] = false;//主动求出存在除了1和数本身之外其他因数的数并将其在boolean数组中的值改为false,最后只输出数组中true值所对应的i值
}
}
}
for(int i=2; i<isPrime.length; i++) {
if(isPrime[i]) {
System.out.print(i+" ");
}
}
24.Math类 (M大写)
//Math类
// abs 求绝对值
// pow 求幂次
// random 给随机数
// round 做四舍五入
System.out.println(Math.abs(-12));//求绝对值
System.out.println(Math.round(10.345));//做四舍五入
System.out.println(Math.random()*100); //计算机随机一个0~100之间的数
System.out.println(Math.pow(2,3)); //求2的3次方
25.字符串变量
String s = new String("Hello");
System.out.println(s+" World");
String s;
Scanner in = new Scanner(System.in);
s = in.nextLine();//输出整行
s = in.next();//输出一个词,由空格分隔
System.out.println(s);
与数组名类似,字符名只是数据的管理者而非所有者
String s1 = "abc";//双引号
String s2 = "abb";
System.out.println(s1.compareTo(s2));//比较字符编码大小,输出1是表示左边的的大,输出-1表示右边的大,输出0表示相等
String s1 = "abc";
for(int i = 0;i<s1.length();i++){//注意length后面的括号
System.out.println(s1.charAt(i));//输出字符的第几位
}
String s1 = "0123456汉字";
System.out.println(s1.substring(2));//substring()方法为返回字符串的子字符串
//字符操作都是从第0位开始,上行代码表示从字符第2位开始输出,输出结果为:23456汉字
System.out.println(s1.substring(2,4));//输出第2位到第4位之间的内容
String s1 = "A123456789";
System.out.println(s1.indexOf('A'));//单引号,indexOf返回地址,输出结果为:0
System.out.println(s1.indexOf('3'));
System.out.println(s1.indexOf('0'));// 0不在字符中,输出为:-1
String s1 = "abcd";
s1.toUpperCase();//大写指令
String s2 = s1;
String s3 = s1.toUpperCase();
System.out.println(s1);//s1本身没有改变
System.out.println(s2);
System.out.println(s3);//字符串操作并不能改变字符串本身,只能由原字符串发展一个新字符串
//输出结果为abcd/abcd/ABCD
26.创建函数判断素数
public static boolean isPrime(int i){//boolean做判断时使用,需返回函数值
boolean isPrime = true;
for(int k = 2; k<i; k++){
if(i % k == 0){
isPrime = fales;
break;
}
}
return isPrime;
}
public static void main(String[] args){
Scanner in = new Scanner(System.in);
int a = in.nextInt();
System.out.print(isPrime(a));
}
27.创建求和函数
public static void sum(int a, int b){//sum()括号里的a,b是参数
int i;
int sum; sum = 0;
for(i=a;i<=b;i++){
sum += i;//sum = sum + i;
}
System.out.println(a+"到"+b+"的和是"+sum);
}
public static void main(String[] args){
Scanner in = new Scanner(System.in);
sum(1,10);
sum(20,30);
sum(3)
}
28.二维数组
int[][] ii = new int[][]{//一维数组中每一个元素都是一个数组,这样数组就是二维数组
{1,2},//第0个元素
{4,2}//第1个元素
};
int[][] ii0 = new int[2][3]{//第一维部分的长度是2,第二维也就是第一维的每个元素的长度是3
{1,2,3},{2,4,6}
};
int[][] ii1 = new int[2][];//只定义第一维度
int[]x,y[];//特殊写法,x是一维数组,y是二维数组
//二维数组求和
int[][] arr = new int[][]{
{3,8,2},
{2,7},
{9016}
};
int len = arr.length;
int sum = 0;
for(int i = 0;i<arr.length; i++){
for(j = 0;j<arr[i].length; j++){
sun += arr[i][j];
}
}
System.out.println(sun);
29.数组常见算法
//求最大值
int[] arr = new int[]{4,7,8,9,6};
int max = arr[0];
for(int i = 0; i<arr.length; i++){
if(max < arr[i]){
max = arr[i];
}
}
System.out.println("max:" + max);
//复制数组
int[] copy = new int[arr.length];//声明一个与arr长度一致的数组
for(int i = 0; i<arr.length; i++){
copy[i] = arr[i];//遍历arr
}
//将数组arr的值倒序
int temp = new int[arr.length];
int k = 0;
for(int i =arr.length-1;i>=0; i--){
temp[k] = arr[i];
k++
};
arr = temp;
for(int i = 0; i<arr.length; i++){
System.out.println(arr[i]);
};
30.冒泡排序
排序思想:相邻两元素进行比较,如有需要则进行交换,每完成一次循环就将最大元素排在最后,下一次循环是将其他的数进行类似操作。
//4,3,7,1
//4,3,1,7第一轮得到一个最大数字,放到倒数第一位
//3,1,4,7第二轮得到除最后一个数字以外的最大数字,放到倒数第二位
//1,3,4,7第三轮得到除最后两个数字以外的最大数字,放到倒数第三位
//正序
int arr[] = new int[]{4,3,7,1};
int a = 0;
for(i = 0; i<arr.length-1; i++){//总的循环论次
for(j = 0;j<arr.length-1-i; j++){//每轮循环的对比次数及排序
if(arr[j] > arr[j+1]){
a=arr[j];
arr[j] = arr[j+1];
arr[j+1] = a;
}
}
}
for(int i = 0; i<arr.length;i++){
System.out.println(arr[i]);
}
//倒序
int arr[] = new int[]{4,3,7,1};
int a = 0;
for(i = 0; i<arr.length-1; i++){//总的循环论次
for(j = 0;j<arr.length-1-i; j++){//每轮循环的对比次数及排序
if(arr[j] < arr[j+1]){
a=arr[j];
arr[j] = arr[j+1];
arr[j+1] = a;
}
}
}
for(int i = 0; i<arr.length;i++){
System.out.println(arr[i]);
}