您的位置:首页 > 编程语言 > Java开发

[ Java学习 ] 一些Java程序 001

2017-10-25 10:44 495 查看
/*

老师之前给过我们一个学Java的建议:

推荐大家看Blackboard上的课件,特别是PPT上的源程序,建议大家拷贝到Eclipse下运行,并且多玩程序,熟悉各种不同用法。

  说来惭愧,又是知道但没做到的道理...

  趁着今天,我找了源程序来看了一下,并且把我觉得,PPT上的,比较“好玩”的Java程序整理一下

  

  另外,发现老师当时给我们的实验指导里,还有这么一段建议,发出来与君共勉~

  

  学编程没有笨同学,只有懒同学。什么时候觉得很糊涂,就需要去看书,看程序,然后通过总结(整理知识点,归纳常见做法)理顺思路,而不是又感叹一遍自己好笨之类的。以前C和C++没学好的同学,不要老认为自己基础不好就学不好java,只是需要花更多的时间看书看程序。学习语言的套路:看书,看程序,总结,练习,成为高手。

  

  <这段话有点扎心了,想到我之前一直没有按照老师所说的建议,把程序下载下来,“改改玩玩,有意思的动手敲一敲”,可不就是懒么?>

  

  以及,老师给了别的学 Java 的建议,也一并放出来:

   1.google或者百度

     A  先精后粗

     B  先中后英

     C  信息筛选,搜索出来的结果不见得能够完全匹配,建议大家多阅读前几页的搜索结果,多打开几个网页看看。一般超过3页还没有找到合适的答案,或许应该调整一下关键词,或者放粗整个搜索的结果了。
 

    2.BBS上问高手

     推荐:http://www.csdn.net/ 中国最有名的技术论坛

     或者直接google或百度搜索,关键词“java论坛”“java bbs”,然后在搜索结果里选择那些活动频繁的论坛。
 
---------好的,言归正传,建议放完了就放代码---------

*/

/* 由这段代码引申出的知识:
* 1. args的参数
* 2. NaN的意义,以及在什么情况下会出现
* 3. Long的几种方法
*/
public class test
{
public static void main(String args[ ]){
double n,sum=0.0 ;
System.out.println("hava a test " + "args.length=" + args.length);
for(int i=0;i<args.length;i++)
{
sum=sum+Double.parseDouble(args[i]);
System.out.println("why???");
System.out.println("args[i]=" + args[i]);
}
n=sum/args.length;
System.out.println("平均数:"+n);
int number=8658;
String binaryString=Long.toBinaryString(number);
System.out.println(number+"的二进制表示:"+binaryString);
System.out.println(number+"的八进制表示:"+Long.toOctalString(number));
System.out.println(number+"的十六进制表示:"+Long.toString(number,16));
}
}

//java实现连续输入
//其实倒也不是多难的程序,就是来看看,怎么样实现连续输入的循环吧
//这段代码的连续输入,可以用任意一个字符,例如 ! 或者 * 来结束
package test;
import java.util.*;
public class test{
public static void main (String args[ ]){
Scanner reader=new Scanner(System.in);
double sum=0;
int m=0;
while(reader.hasNextDouble()){
double x=reader.nextDouble();
m=m+1;
sum=sum+x;
}
System.out.printf("%d个数的和为%f\n",m,sum);
System.out.printf("%d个数的平均值是%f\n",m,sum/m);
}
}

//按照题目要求编写 Employee类
class Employee
{
String name, sex;
int salary;
Employee(String n, int s, String sex)
{
name = n;
salary = s;
this.sex = sex;
}

void show()
{
System.out.println("该雇员的姓名为: " + name);
System.out.println("该雇员的薪水为: " + salary);
System.out.println("该雇员的性别为: " + sex);
}
}

public class Demo
{
public static void main(String args[])
{
Employee e = new Employee("张三", 8000, "男");
e.show();
}
}

//帮助理解数组之间的赋值
public class test{
public static void main(String args[ ]){
int [] a={1,2,3};
int [] b={10,11};
System.out.println("数组a的引用是:"+a);
System.out.println("数组b的引用是:"+b);
System.out.printf("b[0]=%-3db[1]=%-3d\n",b[0],b[1]);
b=a;
System.out.println("数组a的引用是:"+a);
System.out.println("数组b的引用是:"+b);
b[1]=888;
b[2]=999;
System.out.printf("a[0]=%-5da[1]=%-5da[2]=%-5d\n",a[0],a[1],a[2]);
System.out.printf("b[0]=%-5db[1]=%-5db[2]=%-5d\n",b[0],b[1],b[2]);
}
}

//按照题目要求编写两个类
class Employee
{
String name, sex;
int salary;
Employee(String n, int s, String sex)
{
name = n;
salary = s;
this.sex = sex;
}

void show()
{
System.out.println("该雇员的姓名为: " + name);
System.out.println("该雇员的薪水为: " + salary);
System.out.println("该雇员的性别为: " + sex);
}
}

class Manager extends Employee
{
String department;
Manager(String n, int s, String sex, String d)
{
super(n, s, sex);
department = d;
}

void show()
{
System.out.println("该经理的姓名为: " + name);
System.out.println("该经理的薪水为: " + salary);
System.out.println("该经理的性别为: " + sex);
System.out.println("该经理的部门为: " + department);
}
}
public class Demo
{
public static void main(String args[])
{
Employee e = new Employee("张三", 8000, "男");
e.show();
System.out.println();
Manager m = new Manager("李四", 12000, "男", "销售");
m.show();
}
}

//二分法找元素在数组中的位置
//嗯,之所以列出,是因为这段代码用到了二分法,其他的地方,好像没有特别可圈可点之处
import java.util.Scanner;
public class test{
public static void main(String args[]){
int n,start,end,middle;
int a[]={-2,1,4,5,8,12,17,23,45,56,90,100};
start=0;
end=a.length;
middle=(start+end)/2;
int count=0;
Scanner reader=new Scanner(System.in);
System.out.print("请输入一个整数:");
n=reader.nextInt();
while(n!=a[middle]){
if(n>a[middle]){
start=middle;
}
else if(n<a[middle]){
end=middle;
}
middle=(start+end)/2;
count++;
if(count>a.length/2)
break;
}
if(count>a.length/2)
System.out.println(n+"不在数组中");
else
System.out.println(n+"是数组中的第"+middle+"个元素");
}
}

//继承例1
class A{
protected double x=8.0,y=0.888888;
public void speak(){
System.out.println("我喜欢NBA");
}
public void cry(){
y=x+y;
System.out.printf("y=%f\n",y);
}
}
class B extends A{
int y=100,z;
public void speak(){
z=2*y;
System.out.println("I love This Game");
System.out.printf("y=%d,z=%d",y,z);
}
}
class test{
public static void main(String args[ ]){
B b=new B();
b.cry();
b.speak();
}
}

//程序的输出结果为:
//y=8.888888
//I love This Game
//y=100,z=200 (注意最后一行的输出,很容易弄错,其实调用 void speak()时,由于是调用 B类里的函数,因而所用的 y,也应该是 B类里的成员变量y,应该取10)

//继承例2
class A{
public double y=11.456789;
public void f(){
y=y+1;
System.out.printf("y是double型的变量,y=%f\n",y);
}
}
class B extends A{
int y=0;
public void g(){
y=y+100;
System.out.printf("y是int型的变量,y=%d\n",y);
}
}
class test{
public static void main(String args[ ]){
B b=new B();
b.y=200;
b.g();         //调用子类新增的方法
b.f();         //调用子类继承的方法
}
}

//最后输出结果为:
//y是int型的变量,y=300
//y是double型的变量,y=12.456789

//题目:计算一个圆和一个矩形的面积之和
//为了直接用 PI而导入包 Math
import static java.lang.Math.*;
abstract class Geometry
{
abstract public double getArea();
}

class Rect extends Geometry
{
double length, width;
Rect(double l, double w)
{
length = l; width = w;
}
public double getArea()
{
return length * width;
}
}

class Circle extends Geometry
{
double radius;
Circle (double r)
{
radius = r;
}
public double getArea()
{
return PI * radius * radius;
}
}

class TotalArea
{
final int SIZE = 2;
Geometry tuxing[] = new Geometry[SIZE];
TotalArea()
{

tuxing[0] = new Circle(5);
tuxing[1] = new Rect(4, 8);
}

public double computerTotalArea()
{
double ans = 0.0;
for (int i = 0; i < SIZE; i++)
ans += tuxing[i].getArea();

return ans;
}
}

public class Test
{
public static void main(String args[])
{
TotalArea test = new TotalArea();
System.out.println("测试结果,该圆和该矩形的面积之和为: " + test.computerTotalArea() );
}
}


//静态变量和实例变量的区别
class A
{
static int a = 0;
int b;
public A (int a)
{
this.a = a;
}

public A (int a, int b)
{
this(a);
this.b = b;
}

public int add()
{
return a + b;
}

public void display()
{
System.out.println("a="+a+", b=" + b);
System.out.println("a+b=" + this.add());
}
}

public class test
{
public static void main(String args[])
{
A a = new A(10, 5);
A b = new A(20, 8);
a.display();
b.display();
}
}
//继承例4
lass A{
double n;
int m;
void f(){
System.out.printf("子类继承方法f(),n=%f,m=%d\n",n,m);
}
void g(){
System.out.printf("你好,n=%f,m=%d\n",n,m);
}
}
class B extends A{
int n=12;
void g(){
System.out.printf("子类重写方法g(),n=%d,m=%d\n",n,m);
}
void cry(){
System.out.printf("子类新增的方法,n=%d,m=%d\n",n,m);
}
}
public class test{
public static void main(String args[ ]){
A a;
a=new B();            	//a是子类对象的上转型对象
a.n=0.618;            	//操作子类隐藏的double类型成员n
a.m=200;             	//操作子类继承的成员m,等价于b.m=200;
a.f();                	//调用子类继承的方法,等价于b.f();
a.g();                 	//调用子类重写的方法,等价于b.g();
B b=(B)a;            	//上转型对象强制转换成子类对象
b.n=555;           	     //操作子类新增的int类型成员n
b.cry();               	// a.cry();  是非法的
}
}

//继承例3
class A{
int m=0,n=0;
long f(){
return m+n;
}
}
class B extends A{
int m=1,n=1;
long f(){
long result=0;
super.m=10;
super.n=20;
result=super.f()+(m+n);
return result;
}
long g(){
long result=0;
result=super.f();
return result/2;
}
}
public class test{
public static void main(String args[ ]){
B b=new B();
b.m=3;
b.n=7;
long resultOne=b.g();
long resultTwo=b.f();
long resultThree=b.g();
System.out.println("resultOne="+resultOne);
System.out.println("resultTwo="+resultTwo);
System.out.println("resultThree="+resultThree);
}
}
//最后输出结果为:
//resultOne=0
//resultTwo=40
//resultThree=15

//三角形形状问题
import java.util.*;
public class test{
public static void main (String args[ ]){
Scanner reader=new Scanner(System.in);
double a=0,b=0,c=0;
System.out.print("输入边a:");
a=reader.nextDouble();
System.out.print("输入边b:");
b=reader.nextDouble();
System.out.print("输入边c:");
c=reader.nextDouble();
if(a+b>c&&a+c>b&&b+c>a){
if(a*a==b*b+c*c||b*b==a*a+c*c||c*c==a*a+b*b){
System.out.printf("%-8.3f%-8.3f%-8.3f构成是直角三角形",a,b,c);
}
else if(a*a<b*b+c*c&&b*b<a*a+c*c&&c*c<a*a+b*b){
System.out.printf("%-8.3f%-8.3f%-8.3f构成锐角三角形",a,b,c);
}
else{
System.out.printf("%-8.3f%-8.3f%-8.3f构成钝角三角形",a,b,c);
}
}
else{
System.out.printf("%f,%f,%f不能构成三角形",a,b,c);
}
}
}

/*
上面的是老师发的课件里的配套代码

可是我有些看不下去了...double不是有精度损失,不能用 == 来判等的吗?

于是果断加了 EPS,自己动手敲一次这个程序
(我还自己加上了 等腰、等边、等腰直角三角形的判断
也就是说,如果它是特殊三角形,我就会输出它最特殊的那个类型
这个嘛,就是等腰直角三角形、等边三角形这种,我不会只输出等腰三角形的
)

几个注意点:
1. double 类型的判等

2. 只要在源文件顶部加上
import static java.lang.Math.*;
则不必在数学方法名和常量名前添加前缀"Math"
[来自《Java核心技术卷1》P40 的提示栏]
*/
package test;
import java.util.*;
import java.util.Arrays;
import static java.lang.Math.*;
class triangle
{
final double EPS = 1e-6;
double side[] = new double[3];

boolean ifSame(double a, double b)
{
return abs(a - b) < EPS; // double 的浮点精度损失尤其需要注意,一定不要用 == 来判等,而是应该和 EPS 进行比较
}

void inputSide() //输入3边长并排序
{
Scanner reader = new Scanner(System.in);
System.out.println("请输入三角形的三边,用空格或回车隔开3个数据");

for ( int i = 0; i < 3; i++ )
{
side[i] = reader.nextDouble();
}
Arrays.sort(side);
//		System.out.println("After being sorted, the three sides are ");
//		for (int i = 0; i < 3; i++)
//		System.out.print(side[i] + " ");
}

void outputType() //输出三角形类型
{
inputSide();
if ( side[0] + side[1] < side[2] || ifSame ( side[0] + side[1], side[2] ) )
{
System.out.println("输入的三边无法构成三角形");
return;
}

if ( ifSame (side[0], side[2] ) )
{
System.out.println("该三角形是等边三角形");
return;
}

if ( ifSame (side[0], side[1] ) || ifSame (side[1], side[2] ) ) //等腰
{
if ( ifSame ( pow( side[0], 2 ) + pow( side[1], 2 ), pow(side[2], 2 ) ) )
System.out.println("该三角形是等腰直角三角形");
else
System.out.println("该三角形是等腰三角形");
return;
}

if ( ifSame ( pow( side[0], 2 ) + pow( side[1], 2 ), pow(side[2], 2 ) ) )
{
System.out.println("该三角形是直角三角形");
return;
}

if ( pow( side[0], 2 ) + pow( side[1], 2 ) < pow(side[2], 2) )
System.out.println("该三角形是锐角三角形");
else
System.out.println("该三角形是钝角三角形");
}
}

public class test
{
public static void main (String args[])
{
triangle tp = new triangle(); // tp:: temp
tp.outputType();
}
}


/* 字符串 String 类有关知识
* 这段代码的要点在于:
* 1. s1 == s2 和 s1.equals(s2) 的区别
* 2. s1 = new String("..."); 和  s1 = "...";的区别
* 3. 字符串的 contains 函数的使用
*/
public class test{
public static void main(String args[ ]){
String s1,s2;
s1=new String("we are students");
s2=new String("we are students");
System.out.print(s1.equals(s2)+" ");
System.out.println(s1==s2);
String s3,s4;
s3="how are you";
s4="how are you";
System.out.print(s3.equals(s4)+" ");
System.out.println(s3==s4);
System.out.print(s1.contains(s3)+" ");
System.out.println(s2.contains("stu"));
}
}


//数据类型与精度损失
public class test{
public static void main (String args[ ]){
byte a=120;
short b=130;
int c=2200;
long d=8000;
float f;
double g=0.1234567812345678;
a=(byte)b;    //导致精度的损失
c=(int)d;     //未导致精度的损失
f=(float)g;   //导致精度的损失
System.out.println("a="+a);
System.out.println("c="+c);
System.out.println("f="+f);
System.out.println("g="+g);
}
}


//图形界面 比较好玩
例子2
import java.applet.*;
import java.awt.*;
public class Boy extends Applet
{
public void paint(Graphics g)
{
g.setColor(Color.blue);
g.drawString("Java是一门很优秀的语言",12,30);
g.setColor(Color.red);
g.drawString("我一定认真学习Java",22,56);
}
}


//希腊字母表 数学公式里可能会用到
public class test{
public static void main (String args[ ]){
char c='α';
System.out.println("字母"+c+"在unicode表中的顺序位置:"+(int)c);
System.out.println("字母表:");
for(int i=(int)c;i<c+25;i++){
System.out.print(" "+(char)i);
}
}
}


//异常 代码1
//主要是直接编写异常类,以及 throw catch 语句的使用
class MyException extends Exception
{
String message;
MyException(int n)
{
message=n+"不是正数";
}
public String getMessage()
{
return message;
}
}
class A
{
public void f(int n) throws MyException
{
if(n<0)
{
MyException ex=new MyException(n);
throw(ex);                          //抛出异常,结束方法f的执行
}
double number=Math.sqrt(n);
System.out.println(n+"的平方根:"+number);
}
}
public class test
{
public static void main(String args[])
{
A a=new A();
try
{
a.f(28);
a.f(-8);
}
catch(MyException e)
{
System.out.println(e.getMessage());
}
}
}

//程序输出结果为
//28的平方根:5.291502622129181
//-8不是正数


-------------------------------其他相关文章------------------------------

 [Java学习 ] 类的其他文章汇总(都是超链接,可直接点击):

[Java学习 ] 实验 银行业务模拟

[Java学习 ] 破除思维定势之 C++ 和 Java 的差异 001

[Java学习 ] 破除思维定势之 C++ 和 Java 的差异 002

[Java学习 ] 破除思维定势之 C++ 和 Java 的差异 003

[Java学习 ] 包语句 package等语句的汇总整理

[Java学习 ] Java变量以及内存分配(非常重要)

[Java学习 ] 其他知识总结(重要)

[Java学习 ] “goto语句“ 和 “continue + 标号” 的不同待遇

[Java学习 ] toString方法 和 equals方法

 [ Java学习 ] 正则表达式与模式匹配

 

 

 

[Java学习 ] 查阅资料整理 001

[Java学习 ] 查阅资料整理 002

 

[Java学习 ] 一道Java好题的详细题解 001
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Java 编程 总结