Java笔记(2017.03.05更新中)

本文是Java编程的基础教程,涵盖了数据类型的使用,包括int、byte、long、short、double、float、boolean和char,以及如何进行输入输出。文章还介绍了运算符的用法,如逻辑运算符、位运算符、转义字符,以及如何实现数字交换。此外,还讲解了if...else、switch...case语句的使用,Scanner类的输入输出,以及编程练习,涉及条件判断、循环控制、数组操作等核心概念。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

数据类型举例:
public class Test
{
public static void main(String [] args)
{
int a=10;
byte b=10;
long c=564521458;
short d=10;
double e=1.0;
float f=10.f;
boolean g=false;
char h='a';
String name="朱智睿";
System.out.println(a);
System.out.println(b);
System.out.println(c);
System.out.println(d);
System.out.println(e);
System.out.println(f);
System.out.println(g);
System.out.println(h);
System.out.println(name);
}
}
输入输出举例:
import java.util.*;
public class Test
{
public static void main (String[] args)
{
Scanner sc =new Scanner(System.in);
System.out.println("请输入您的姓名");
String name=sc.nextLine();//int age=sc.nextInt(); next只以回车作为结束,nextLine记录所有的非回车
System.out.println("您的姓名为"+name);
}
}
一 运算符 数字交换 if else 嵌套
System.err.println()输出的字符是红色的(eclipse)
二元运算符举例:
public class Test
{
public static void main(String[] args)
{
boolean a=true;
boolean b= false;
System.out.println(a && b);
System.out.println(a || b);
System.out.println(! a);
}
}
位运算符: & | ^(按位且、或、异或)相同为0,不同为1(从二进制角度衡量二者等不等)
转义字符:
public class Test
{
public static void main(String[] args)
{
System.out.print("HelloJava\n");
System.out.print("Hello\\Java");//输出一个反斜杠
}
}
字符的优先级:加括号
public class Test
{
public static void main(String[] args)
{
int a=5;
int b=6;
int c=2;
int e=a+b/c;
boolean f=false;
boolean g=true;
System.out.println(e);
System.out.println(f+" "+g);
System.out.println("运算符顺序"+(f && g));
}
}
数字交换举例:
public class Test
{
public static void main(String[] args)
{
int a=1;
int b=2;
int c;
c=a;
a=b;
b=c;
System.out.println("A="+a+"\nB="+b);
}
}
无第三变量的数字交换
public class Test
{
public static void main(String[] args)
{
int a=1;
int b=2;
a=a+b;
b=a-b;
a=a-b;
System.out.println("A="+a+"\nB="+b);
}
}
switch...case的用法:
传统switch...case
public class Test
{
public static void main(String[] args)
{
int a=1;//字符用单引号,字符串使用双引号。boolean不能使用此形式
switch(a)
{
case 10:
System.out.println(10);
break;
case 9:
System.out.println(9);
break;
case 8:
System.out.println(8);
break;
case 7:
System.out.println(7);
break;
case 6:
System.out.println(6);
break;
default:
System.out.println("a="+a);
}
}
}
非常规的switch...case
public class Test
{
public static void main(String[] args)
{
String name="Sam";
switch(name)
{
case "Tom":
case "Irc":
case "Sam":
System.out.println("It`s good");
break;
case "Sara":
System.out.println("so bad");
break;
default:
System.out.println("well");
}
}
}
Scanner的问题:
import java.util.*;
public class Test
{
public static void main(String[] args)
{
Scanner sc1=new Scanner(System.in);
String name=sc1.nextLine();
System.out.println(name);
Scanner sc2=new Scanner(System.in);
boolean bl=sc2.nextBoolean();
System.out.println(bl);
}
}
if...else不建议三层极其以上的嵌套
练习题:
1.输入两个不等数,输出较小的数
import java.util.*;
public class Test
{
public static void main(String[] args)
{
Scanner sc1=new Scanner(System.in);
int a=sc1.nextInt();
Scanner sc2=new Scanner(System.in);
int b=sc2.nextInt();
if(a<b)
{
System.out.println(a);
}
else
{
System.out.println(b);
}
}
}
2.输入两个不等数,按从小到大顺序输出
import java.util.*;
public class Test
{
public static void main(String[] args)
{
Scanner sc1=new Scanner(System.in);
int a=sc1.nextInt();
Scanner sc2=new Scanner(System.in);
int b=sc2.nextInt();
if(a<b)
{
System.out.println(a+" "+b);
}
else
{
System.out.println(b+" "+a);
}
}
}
3.输入一个数,输出这个数的绝对值
import java.util.*;
public class Test
{
public static void main(String[] args)
{
Scanner sc1=new Scanner(System.in);
int a=sc1.nextInt();
if(a<0)
{
System.out.println(-a);
}
else
{
System.out.println(a);
}
}
}
4.输入一个数,判断这个数能否同时被2和3整除,可以输出yes不可以输出no
import java.util.*;
public class Test
{
public static void main(String[] args)
{
Scanner sc1=new Scanner(System.in);
int a=sc1.nextInt();
if((0==a%2) && (0==a%3))
{
System.out.println("Yes");
}
else
{
System.out.println("No");
}
}
}
5.输入两个整数,打印两个数的差值
import java.util.*;
public class Test
{
public static void main(String[] args)
{
Scanner sc1=new Scanner(System.in);
int a=sc1.nextInt();
Scanner sc2=new Scanner(System.in);
int b=sc2.nextInt();
System.out.println(a-b);
}
}
6.编写一程序实现如下功能:输入1、2、3、4(分别对应春夏秋冬)中的一个季节,便能输出与之对应的中文名称。如输入1,则输出“春”。
import java.util.*;
public class Test
{
public static void main(String[] args)
{
Scanner sc=new Scanner(System.in);
int a=sc.nextInt();
if(a<1 || a>4)
{
System.out.println("输入非法");
}
switch(a)
{
case 1:
System.out.println("春");
break;
case 2:
System.out.println("夏");
break;
case 3:
System.out.println("秋");
break;
case 4:
System.out.println("冬");
}
}
}
7.输入三个不等整数,输出其中值最大数
import java.util.*;
public class Test
{
public static void main(String[] args)
{
Scanner sc1=new Scanner(System.in);
int a=sc1.nextInt();
Scanner sc2=new Scanner(System.in);
int b=sc2.nextInt();
Scanner sc3=new Scanner(System.in);
int c=sc3.nextInt();
if(a<b)
{
a=b;
}
if(b<c)
{
b=c;
}
if(a<c)
{
a=c;
}
System.out.println(a);
}
}
8.输入三个不等数,按从小到大顺序输出
import java.util.*;
public class Test
{
public static void main(String[] args)
{
Scanner sc1=new Scanner(System.in);
int a=sc1.nextInt();
Scanner sc2=new Scanner(System.in);
int b=sc2.nextInt();
Scanner sc3=new Scanner(System.in);
int c=sc3.nextInt();
int i;
if(a>b)
{
i=a;
a=b;
b=i;
}
if(a>c)
{
i=a;
a=c;
c=i;
}
if(b>c)
{
i=b;
b=c;
c=i;
}
System.out.println(a+""+b+""+c);
}
}
9.输入一个字符,判断是否为大写字母,如果是,将它转换成小写字母后输出,如果不是,原样输出
(提示:输入一个字符,用 char c = input.next().charAt(0);)
import java.util.*;
public class Test
{
public static void main(String[] args)
{
Scanner sc=new Scanner(System.in);
char a=sc.next().charAt(0);
int i=(int)a;
if(i>=65 && i<=90)
{
a=(char)(i+32);
System.out.println(a);
}
else
{
System.out.println(a);
}
}
}
10.写一个程序,判断某一年是否为闰年(被4整除但不能被100整除能被400整除)是闰年
import java.util.*;
public class Test
{
public static void main(String[] args)
{
Scanner sc1=new Scanner(System.in);
int a=sc1.nextInt();
if(a%4==0 && a%100!=0)
{
System.out.println("是闰年");
}
else if(a%400==0)
{
System.out.println("是闰年");
}
else
{
System.out.println("不是闰年");
}
}
}
11.输入一个两位数,将其十位数字与个位数字颠倒后输入,例如:输入13,输出31
import java.util.*;
public class Test
{
public static void main(String[] args)
{
Scanner sc=new Scanner(System.in);
int a=sc.nextInt();
int i=a/10;
int j=a%10;
int b=j*10+i;
System.out.println(b);
}
}
12.输入一个月数,然后输出对应月份有多少天(不考虑闰年),将天数输出
import java.util.*;
public class Test
{
public static void main(String[] args)
{
Scanner sc=new Scanner(System.in);
int a=sc.nextInt();
switch(a)
{
case 1:
System.out.println(31);
break;
case 2:
System.out.println(28);
break;
case 3:
System.out.println(31);
break;
case 4:
System.out.println(30);
break;
case 5:
System.out.println(31);
break;
case 6:
System.out.println(30);
break;
case 7:
System.out.println(31);
break;
case 8:
System.out.println(31);
break;
case 9:
System.out.println(30);
break;
case 10:
System.out.println(31);
break;
case 11:
System.out.println(30);
break;
case 12:
System.out.println(31);
break;
}
}
}
13.输入一个数字,判断这个数字是否是三位数,如果是三位数,再判断是否是水仙花数(水仙花数:三位数的每一位的立方相加等于这个数字本身,例如:1^3 + 5^3 + 3^3 = 153)
import java.util.*;
public class Test
{
public static void main(String[] args)
{
Scanner sc=new Scanner(System.in);
int a=sc.nextInt();
if(a>=100 && a<=999)
{
System.out.println("是三位数");
int i,j,k;
i=a/100;
j=(a/10)%10;
k=a%10;
if(i*i*i+j*j*j+k*k*k==a)
{
System.out.println("此数为水仙花数");
}
else
{
System.out.println("此数不是水仙花数");
}
}
else
{
System.out.println("不是三位数");
}
}
}
14.不借助第三个变量实现交换两个变量的值
import java.util.*;
public class Test
{
public static void main(String[] args)
{
Scanner sc1=new Scanner(System.in);
Scanner sc2=new Scanner(System.in);
int a=sc1.nextInt();
int b=sc2.nextInt();
a=a+b;
b=a-b;
a=a-b;
System.out.println(a+""+b);
}
}
二 循环
前自增和后自增
50-100的和:
public class Test
{
public static void main(String[] args)
{
int sum=0;
for(int i=50;i<=100;++i)
{
sum=sum+i;
}
System.out.println(sum);
}
}
打印星号举例:
public class Test
{
public static void main(String[] args)
{
for(int i=1;i<=5;++i)
{
for(int j=1;j<=i;++j)
{
System.out.print("*");
}
System.out.println();
}
}
}
稍困难的打印星号:
public class Test
{
public static void main(String[] args)
{
for(int i=5;i>0;--i)
{
for(int j=1;j<=i;++j)
{
System.out.print(" ");
}
for(int k=10;k>2*i-1;--k)
{
System.out.print("*");
}
System.out.println();
}
}
}
continue的使用
public class Test
{
public static void main(String[] args)
{
int a=10;
for(int i=1;i<11;++i)
{
if(i==9)
{
continue;
}
System.out.println(i);
}
}
}
Label的使用:
public class Test
{
public static void main(String[] args)
{
a:for(int i=0;i<5;++i)
{
for(int j=0;j<5;++j)
{
if(j==3)
{
break a;
}
System.out.println("HelloJava");
}
}
}
}
练习题:
1.以下8个题目使用switch。。。case。。。结构完成,要求:输入想查看的题号,输出该程序的结果)
1:正序输出1~100之间的所有的数字。
2:倒序输出1~50之间所有的偶数。
3:倒序输出26个大写字母。
4:输入一个大写字母,顺序输出从A到26个大写字母之间的字母序列。
5:顺序输出两个小写字母之间的字母序列。
6:在屏幕上输出10行内容,每行的内容都不一样,第1行输出“1”,第 2行输出“2”,依此类推第10行输出“10”。
7:输出0~n范围内的的质数。
8:设计一个方法,方法的作用是计算两个数字的和
import java.util.*;
public class Test
{
public static void main(String[] args)
{
Scanner sc=new Scanner(System.in);
System.out.println("请输入想要解决题目的序号:");
System.out.println("1:正序输出1~100之间的所有的数字");
System.out.println("2:倒序输出1~50之间所有的偶数");
System.out.println("3:倒序输出26个大写字母");
System.out.println("4:输入一个大写字母,顺序输出从A到26个大写字母之间的字母序列");
System.out.println("5:顺序输出两个小写字母之间的字母序列");
System.out.println("6:在屏幕上输出10行内容,每行的内容都不一样,第1行输出“1”,第 2行输出“2”,依此类推第10行输出“10”");
System.out.println("7:输出0~n范围内的的质数");
System.out.println("8:设计一个方法,方法的作用是计算两个数字的和");
int num=sc.nextInt();
switch(num)
{
case 1:
for(int i=1;i<=100;++i)
{
System.out.println(i);
}
break;
case 2:
for(int i=50;i>0;--i)
{
if(i%2==0)
{
System.out.println(i);
}
}
break;
case 3:
for(int i=90;i>=65;--i)
{
char a=(char)i;
System.out.println(a);
}
break;
case 4:
System.out.println("请输入一个大写字母");
Scanner sc1=new Scanner(System.in);
char ch1=sc1.next().charAt(0);
int i=(int)ch1;
for(int j=65;j<=i;++j)
{
char ch2=(char)j;
System.out.println(ch2);
}
break;
case 5:
System.out.println("请输入两个小写字母");
Scanner sc51=new Scanner(System.in);
Scanner sc52=new Scanner(System.in);
char ch51=sc51.next().charAt(0);
char ch52=sc52.next().charAt(0);
int a51=(int)ch51;
int a52=(int)ch52;
if(a51<a52)
{
for(int i5=a51;i5<=a52;++i5)
{
char ch53=(char)i5;
System.out.println(ch53);
}
}
else
{
for(int i5=a51;i5>=a52;--i5)
{
char ch53=(char)i5;
System.out.println(ch53);
}
}
break;
case 6:
for(int i6=1;i6<=10;++i6)
{
System.out.println(i6);
}
break;
case 7:
System.out.println("输入最大范围");
Scanner sc7=new Scanner(System.in);
int a7=sc7.nextInt();
for(int i7=2;i7<=a7;++i7)
{
boolean flag=true;
for(int j7=2;j7<i7;++j7)
{
if(i7%j7==0)
{
flag=false;
break;
}
}
if(flag)
{
System.out.println(i7);
}
}
break;
case 8:
System.out.println("输入两个数字");
Scanner sc81=new Scanner(System.in);
Scanner sc82=new Scanner(System.in);
int a8=sc81.nextInt();
int b8=sc82.nextInt();
int sum=a8+b8;
System.out.println(a8+"+"+b8+"="+sum);
break;
default:
System.out.println("输入数字非法");
}
}
}
2.图形打印:

*
**
***
****
*****
******
public class Test
{
public static void main(String[] args)
{
for(int i=0;i<6;++i)
{
for(int j=6;j>=6-i;--j)
{
System.out.print("*");
}
System.out.println();
}
}
}
3.输出100以内的从0开始到任意数范围内的奇数和与偶数和(不包括该任意数)
import java.util.*;
public class Test
{
public static void main(String[] args)
{
Scanner sc=new Scanner(System.in);
int a=sc.nextInt();
if(a>=0 && a<=100)
{
int sum1=0;
int sum2=0;
for(int i=0;i<a;++i)
{
if(i%2==0)
{
sum1=sum1+i;
}
else
{
sum2=sum2+i;
}
}
System.out.println("偶数和为"+sum1);
System.out.println("奇数和为"+sum2);
}
else
{
System.out.println("输入数字非法");
}
}
}
4.图形打印:

*
***
*****
*******
*********
public class Test
{
public static void main(String[] args)
{
for(int i=5;i>0;--i)
{
for(int j=1;j<i;++j)
{
System.out.print(" ");
}
for(int k=10;k>2*i-1;--k)
{
System.out.print("*");
}
System.out.println();
}
}
}
5.图形打印:

12345
1234
123
12
1
public class Test
{
public static void main(String[] args)
{
for(int i=5;i>0;--i)
{
for(int j=1;j<=i;++j)
{
System.out.print(j);
}
System.out.println();
}
}
}
6.判断1987是不是一个质数(质数是只能被1和它自身整除的数)
public class Test
{
public static void main(String[] args)
{
int a=1987;
boolean flag=true;
for(int i=2;i<a;++i)
{
if(a%i==0)
{
System.out.println("不是质数");
flag=false;
break;
}
}
if(flag==true)
{
System.out.println("为质数");
}
}
}
7.输出从1到1000以内所有能同时被3,5和7整除的数
public class Test
{
public static void main(String[] args)
{
for(int i=1;i<=1000;++i)
{
if(i%3==0 && i%5==0 && i%7==0)
{
System.out.println(i);
}
}
}
}
8.打印九九乘法表
public class Test
{
public static void main(String[] args)
{
for(int i=9;i>=1;--i)
{
for(int j=9;j>=1;--j)
{
int a=i*j;
System.out.print(j+""+"*"+i+"="+a+"\t");
}
System.out.println();
}
}
}
9.打印所有的水仙花数
public class Test
{
public static void main(String[] args)
{
for(int i=100;i<=999;++i)
{
int a=i/100;
int b=(i/10)%10;
int c=i%10;
if(a*a*a+b*b*b+c*c*c==i)
{
System.out.println(i);
}
}
}
}
10.设计一个方法,功能:从控制台输入一个数字,打印指定行数的三角形
例如:从控制台输入数字5, 打印

*
***
*****
*******
*********
import java.util.*;
public class Test
{
public static void main(String[] args)
{
System.out.println("请输入层数");
Scanner sc=new Scanner(System.in);
int a=sc.nextInt();
for(int i=a;i>0;--i)
{
for(int j=1;j<i;++j)
{
System.out.print(" ");
}
for(int k=2*a;k>2*i-1;--k)
{
System.out.print("*");
}
System.out.println();
}
}
}
11.一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在第10次落地时,共经过多少米?
public class Test
{
public static void main(String[] args)
{
float a=10;
float sum=0;
for(int i=1;i<=10;++i)
{
sum=(float) (sum+(1.5)*a);
a=(float)0.5*a;
System.out.println(sum);
}
System.out.println(sum);
}
}
12.计算从1到100之间临近两个整数的合并依次输出。比如第一次输出3(1+2),第二次输出5(2+3),最后依次输出199(99+100)。
public class Test
{
public static void main(String[] args)
{
for(int i=1;i<100;++i)
{
int sum=0;
sum=i+(i+1);
System.out.println(i+"+"+(i+1)+"="+sum);
}
}
}
13.过9游戏:循环打印数字(100以内即可),如果这个数字是9的倍数(例如:9,18,27,。。。),或者是包含9的数字(例如19,29,。。。),打印“过”否则就打印这个数字
import java.util.*;
public class Test
{
public static void main(String[] args)
{
Scanner sc=new Scanner(System.in);
int a=sc.nextInt();
if(a>0 && a<=100)
{
if(a%9==0 || a%10==9)
{
System.out.println("过");
}
else
{
System.out.println(a);
}
}
else
{
System.out.println("输入数字非法");
}
}
}
14.给定一个5位的整数,将该数按照10进制位逆置打印,例如给定12345打印54321,12320打印2321
import java.util.*;
public class Test
{
public static void main(String[] args)
{
Scanner sc=new Scanner(System.in);
int i=sc.nextInt();
if(i>9999 && i<=99999)
{
int a=i/10000;
int b=(i/1000)%10;
int c=(i/100)%10;
int d=(i/10)%10;
int e=i%10;
int j=(e*10000)+(d*1000)+(c*100)+(b*10)+a;
System.out.println(j);
}
else
{
System.out.println("输入数字非法");
}
}
}
三.数组
什么是数组:数据分组
一般的数组遍历:
public class Test
{
static void show(String[] arr)
{
for(int i=0;i<arr.length;++i)
{
System.out.println(arr[i]);
}
}
public static void main(String[] args)
{
String arr[]=new String[5];
arr[0]="朱智睿";
arr[1]="宇文泰";
arr[2]="宇文觉";
arr[3]="宇文护";
arr[4]="宇文化及";
show(arr);
System.exit(0);
}
}
普通数组的输入:
import java.util.*;
public class Test
{
public static void main(String[] args)
{
String arr[]=new String [5];
input(arr);
show(arr);
}
static void input(String[] arr)
{
Scanner sc=new Scanner(System.in);
System.out.println("Please input some name");
for(int i=0;i<arr.length;++i)
{
arr[i]=sc.next();
}
}
static void show(String[] arr)
{
for(int j=0;j<arr.length;++j)
{
System.out.println(arr[j]);
}
}
}
增强for循环(遍历的时候使用此方法)
String i : arr 数组中存放的数据类型 变量名 into在...中 数组的引用
static void show(String[] arr)
{
for(String j : arr)
{
System.out.println(j);
}
}
可变参数(本质就是一个数组)
传递:值传递(int a=10; int b=a) 引用传递(int[] arr=new int[100]; int brr=arr)
在同种方法中有且只有一个
顺序问题
可变参数必须使用增强for循环
public class Test
{
public static void main(String[] args)
{
int arr[]={1,2,3,4,5,6,7,8,8};
System.out.println(add(arr));
}
static int add(int...arr)
{
int sum=0;
for(int i : arr)
{
sum=sum+i;
}
return sum;
}
}
二分搜索
二分搜索的条件:有序,不知道排列个数
import java.util.*;
public class Test
{
public static void main(String[] args)
{
int arr[] ={1,3,5,7,9,11,13,15,17,19};
System.out.println("Please input a number");
Scanner sc=new Scanner(System.in);
int i=sc.nextInt();
search(i,arr);
}
static int search(int i,int[] arr)
{
int left=0;
int right=arr.length-1;
while(left<=right)// 二分搜索需要注意的问题
{
int middle=(left+right)/2;
if(i>arr[middle])
{
left=middle+1;
}
else if(i<arr[middle])
{
right=middle-1;
}
else
{
System.out.println(middle);
return middle;
}
}
return -1;//查找失败通用数值-1,return至关重要
}
}
二维数组的遍历
public class Test
{
public static void main(String[] args)
{
int [] [] arr={{1,2,3},{4,5},{6},{7,8,9}};
show(arr);
}
static void show(int[][] arr)
{
for(int i=0;i<arr.length;++i)
{
int[] arr1=arr[i];//二维数组的遍历需要注意
for(int j=0;j<arr1.length;++j)
{
System.out.print(arr1[j]);
}
System.out.println();
}
}
}
冒泡排序:与邻近的交换
注意以第二个for循环为重!
选择排序:与其他任何交换
练习题:
1:找出下面数组中的最大值{1,9,5,7,8,2,6}
public class Test
{
public static void main(String[] args)
{
int arr[]={1,9,5,7,8,2,6};
System.out.println(max(arr));
}
static int max(int[] arr)
{
for(int i=0;i<arr.length;++i)
{
if(arr[0]<arr[i])
{
int b=arr[0];
arr[0]=arr[i];
arr[i]=b;
}
}
return arr[0];
}
}
2:把数组中的值,轮转一遍,第1个值给最后1个,第2个给第1个,依次进行,直到最后1个给倒数第2个
import java.util.*;
public class Test
{
public static void main(String[] args)
{
int arr[]=new int [5];
Scanner sc=new Scanner(System.in);
System.out.println("Please input five numbers");
for(int i=0;i<arr.length;++i)
{
int a=sc.nextInt();
arr[i]=a;
}
show(arr);
change(arr);
}
static void show(int[] arr)
{
for(int i:arr)
{
System.out.println(i);
}
return;
}
static void change(int[] arr)
{
int l=arr.length;
int[] arr1=new int[l];
for(int i=0;i<l;++i)
{
if(i==0)
{
arr1[l-1]=arr[0];
}
else
{
arr1[i-1]=arr[i];
}
}
for(int j : arr1)
{
System.out.println(j);
}
}
}
3:写一个方法,反转数组内的内容:
(要求:不准新建数组)
初始状态:
int[] list = {2,1,9,6,0};
最终状态:
list = {0,6,9,1,2};
public class Test
{
public static void main(String[] args)
{
int arr[]={2,1,9,6,0};
change(arr);
}
static void change(int [] arr)
{
int l=arr.length;
int left=0;
int right=l-1;
int a;
while(left<right)
{
a=arr[left];
arr[left]=arr[right];
arr[right]=a;
left++;
right--;
}
for(int i:arr)
{
System.out.println(i);
}
}
}
4:写一个方法,找出数组中的第二大的值,并返回该值及其下标
有缺陷,第一个为最大时不准确
import java.util.*;
public class Test
{
public static void main(String[] args)
{
int arr[]=new int[5];
Scanner sc=new Scanner(System.in);
System.out.println("Please input five numbers");
for(int i=0;i<arr.length;++i)
{
int a=sc.nextInt();
arr[i]=a;
}
second(arr);
}
static void second(int[] arr)
{
int max=0;
int max1=0;
int a,b;
for(int i=0;i<arr.length;++i)
{
if(arr[max]<arr[i])
{
a=max;
max=i;
i=a;
}
}
for(int j=0;j<arr.length;++j)
{
if(arr[max1]<arr[j] && arr[j]<arr[max])
{
b=max1;
max1=j;
j=b;
}
}
System.out.println(max1+" "+arr[max1]);
}

}
5:现在有如下一个数组:
int[] oldArr={1,9,1,7,11,2,1,8,1,3,4,6,1,2,1};
要求将以上数组中的所有的1去掉,将不为1的值存入一个新的数组,生成新的数组为:
int[] newArr={9,7,11,2,8,3,4,6,2};
public class Test
{
public static void main(String[] args)
{
int oldArr[]={1,9,1,7,11,2,1,8,1,3,4,6,1,2,1};
change(oldArr);
}
static void change(int[] oldArr)
{
int a=0;
for(int i:oldArr)
{
if(i!=1)
{
++a;
}
}
int newArr[]=new int[a];
int b=0;
for(int j:oldArr)
{
if(j!=1)
{
newArr[b]=j;
++b;
}
}
for(int k:newArr)
{
System.out.println(k);
}
}
}
6:使用二分搜索在下列数组中查找12这个数,并返回其下标记
int[] arr={1,9,1,7,11,2,1,8,12,3,4,6,1,2,1};
public class Test
{
public static void main(String[] args)
{
int arr[]={1,9,1,7,11,2,1,8,12,3,4,6,1,2,1};
show(arr);
sort(arr);
System.out.println();
show(arr);
System.out.println();
System.out.println(search(12,arr));
}
static void show(int[] arr)
{
for(int i:arr)
{
System.out.print(i+",");
}
}
static void sort(int[] arr)
{
int k;
for(int i=0;i<arr.length;++i)
{
for(int j=i+1;j<arr.length;++j)
{
if(arr[i]<arr[j])
{
k=arr[i];
arr[i]=arr[j];
arr[j]=k;
}
}
}
}
static int search(int num,int[] arr)
{
int left=0;
int right=arr.length-1;
while(left<=right)
{
int middle=(left+right)/2;
if(num>arr[middle])
{
right=middle-1;
}
else if(num<arr[middle])
{
left=middle+1;
}
else
{
return middle;
}
}
return -1;
}
}
7:设计一个程序,实现下列方法:
进行数组排序的 void sort(int[] arr)
查找某个元素的 int serch(int[] arr,int emp)
为数组求和的 int sum(int[] arr)
进行数组遍历的 void show(int[] arr)
import java.util.*;
public class Test
{
public static void main(String[] args)
{
System.out.println("How long?");
Scanner sc1=new Scanner(System.in);
int a=sc1.nextInt();
int arr[]=new int[a];
int b;
for(int i=0;i<arr.length;++i)
{
Scanner sc2=new Scanner(System.in);
b=sc2.nextInt();
arr[i]=b;
}
show(arr);
System.out.println();
System.out.println(sum(arr));
sort(arr);
show(arr);
System.out.println();
System.out.println("Which number you will search?");
Scanner sc3=new Scanner(System.in);
int c=sc3.nextInt();
System.out.println(search(c,arr));
}
static void show(int[] arr)
{
for(int i:arr)
{System.out.print(i+",");
}
}
static int sum(int...arr)
{
int sum=0;
for(int i:arr)
{
sum=sum+i;
}
return sum;
}
static void sort(int[] arr)//使用冒泡排序
{
int k;
for(int i=0;i<arr.length;++i)
{
for(int j=0;j<arr.length-i-1;++j)
{
if(arr[j]>arr[j+1])
{
k=arr[j];
arr[j]=arr[j+1];
arr[j+1]=k;
}
}
}
}
static int search (int a,int[] arr)
{
int left=0;
int right=arr.length-1;
while(left<=right)
{
int middle=(left+right)/2;
if(a<arr[middle])
{
right=middle-1;
}
else if(a>arr[middle])
{
left=middle+1;
}
else
{
return middle;
}
}
return -1;
}
}
8.设计一个方法,实现和计算机的博弈,
首先,我在1—1000范围内找一个整数,计算机在该范围内随机出一个数字
然后,将彼此的数据进行比较
最后,返回两者间最大的数字,以及打印出胜利的一方
(注意:随机数的使用方法Math.random()方法,同时我希望游戏可以无限玩下去。。。)
import java.util.*;
public class Test
{
public static void main(String[] args)
{
int a,b;
System.out.println("Welcome! You First");
do{
Scanner sc=new Scanner(System.in);
a=sc.nextInt();
b=(int) (Math.random()*999+1);//取随机数需要注意的点
if(a>=1 && a<=1000 && b<a )
{
System.out.println("You Win!");
System.out.println(a);
}
else if(a>=1 && a<=1000 && b>a)
{
System.out.println("You Lose!");
System.out.println(b);
}
else if(a<1 || a>1000)
{
System.out.println("You Are Wrong");
}
else
{
System.out.println("Error");
}
}while(true);
}
}
四.面向对象
面向对象是基于面向过程而言
面向过程:强调的是功能(java中函数和方法不区分);关注解决问题的步骤
面向对象:将功能封装进对象,强调具备了功能的对象;关注解决问题需要哪些对象
对象(个体)->类(族群)
静态方法(类) 特征->属性 行为->方法
面向对象的分析与设计
面向对象的特点: 符合人类思想习惯;可以将复杂的事情简单化(复用);从执行者变成指挥者
完成需求时:先去找具有所需功能的对象来用;如果该对象不存在,创建一个对象来使用;这样可以简化代码,提高复用
java中面向对象的三大特征:
1.封装:是把一个事物包装起来,使外界不能了解它内部的具体情况。
数据封装:只对外提供一个访问途径
内存分析:通过对JVM中的java字节码文件的分析,来理解栈,堆,方法区,数据区
2.继承(java中的继承都是公有继承):在已有类的基础上,再创建新类提供一些必有的信息给新类
父类与子类 IS-A(继承) java中是单一继承,没有多继承
3.多态(没有继承就没有多态)
方法重载(方法名相同,形参列表不同)
子类对象可以和父类对象相互转换,而且可以根据其使用的子类不同完成不同的操作(父类的对象可以接受子类的对象)

类是对象的抽象(描述),对象是类的实例化(实现) 对象是该类事物实实在在的个体
方法:普通方法(对象方法)

局部变量和成员变量的作用域
类里面的特征->属性 成员(对象)属性->成员变量
局部变量一般是定义在代码块中,作用范围是在当前代码块中,局部变量在使用中一定要进行初始化(赋值)
成员变量的类型(全局变量)
1.基本数据类型 byte short int long 默认值为0 char 默认值为 ‘\u0000’(空格) float double 默认值为0.0 boolean 默认值为false
2.引用数据类型 String 默认值为null
普通成员变量和静态(static) 成员变量
普通成员变量,普通方法属于对象 静态成员变量,静态方法属于类
调用静态变量时调用类,不能调用对象
在一个文件中,只有一个类是公有的,可以有多个main

练习题:
1、图书馆管理员张三检查学生李四的借书证,如果是A型借书证,借《金庸全集》,否则借《十万个为什么》
class admin
{
String book1="金庸全集";
String book2="十万个为什么";
void check(char i)
{
if(i=='A')
{
System.out.println(book1);
}
else
{
System.out.println(book2);
}
}
}
class custom
{
char type;
public custom(char a)
{
type=a;
}
char borrow()
{
return type;
}
}
public class Test
{
public static void main(String[] args)
{
admin zhangsan=new admin();
custom lisi=new custom('C');
zhangsan.check(lisi.borrow());
}
}
2.通过构造方法,初始化一个四开门白色宝马
class car
{
String name;
String type;
int money;
String color;
int door;
public car(String a,String b,int c,String d,int e)
{
name=a;
type=b;
money=c;
color=d;
door=e;
}
void turnon ()
{
System.out.println(name);
System.out.println(type);
System.out.println(money);
System.out.println(color);
System.out.println(door);
System.out.println("Turn On");
}
}
public class Test
{
public static void main(String[] args)
{
car a=new car("宝马","LoDS5686",499999,"White",4);
a.turnon();
}
}
3.小明手里有两张牌,左手红桃A,右手方片K,现在让小明交换两只手里的牌,问交换完之后,小明左右手的牌,各是什么?
class people
{
static String left;
static String right;
public people(String a,String b)
{
left=a;
right=b;
}
void swop()
{
String i;
i=left;
left=right;
right=i;
System.out.println(left+" "+right);
}
}
public class Test
{
public static void main(String[] args)
{
people xiaoming=new people("红桃A","方片K");
xiaoming.swop();
}
}
4.设计一个联系人类,具有属性(姓名,性别,年龄,手机号,身份证号)
设计一个通讯录类,具有属性(所有的联系人)
具有方法(添加一个联系人,查找一个联系人,查找所有联系人)
class person
{
String name;
String sex;
String age;
String phone;
String id;
int cnt=0;
public person(String a,String b,String c,String d,String e)
{
name=a;
sex=b;
age=c;
phone=d;
id=e;
}
}
class list
{
int num=1;
String[][] arr=new String[10][5];
void add(person person)
{
arr[num-1][0]=person.name;
arr[num-1][1]=person.sex;
arr[num-1][2]=person.age;
arr[num-1][3]=person.phone;
arr[num-1][4]=person.id;
for(int i=0;i<5;++i)
{
System.out.println(arr[num-1][i]);
}
++num;
}
void search(String str)
{
for(int a=0;a<num-1;++a)
{
String st1=arr[a][0];
if(st1.equals(str))
{
for(int b=0;b<5;++b)
{
System.out.println(arr[a][b]);
}
}
}
System.out.println("End");
}
void read()
{
for(int j=0;j<num-1;++j)//因为num是1为开始的
{
String arr1[]=arr[j];
for(int k=0;k<5;++k)
{
System.out.println(arr1[k]);
}
}
System.out.println("end");
}
}
public class Test
{
public static void main(String[] args)
{
list l1=new list();
person p1=new person("Test1","男/女","00","1234567890","1234567890");
person p2=new person("Test2","男/女","00","1234567890","1234567890");
person p3=new person("Test3","男/女","00","1234567890","1234567890");
person p4=new person("Test4","男/女","00","1234567890","1234567890");
person p5=new person("Test5","男/女","00","1234567890","1234567890");
l1.add(p1);
l1.add(p2);
l1.add(p3);
l1.add(p4);
l1.add(p5);
l1.read();
l1.search("Test3");
}
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值