[公告]java起步篇
<P>看高人编写的程序,对于初学者来说很难看懂,不如来个初学者专版,欢迎大家踊跃投稿。</P><P>请发帖的朋友尽量使用一下规则,从而给读者一种“规范”、“一致”的感觉。
1、主题的要求:
发表回复时,
1.如果此帖为关于某个程序的第一帖。主题为“某某程序的......”。
2.如果要对某个已经存在的程序的帖子进行补充。首先,“引用”要补充的帖子;其次,在主题“Re 某某程序”的后面加上“(补充)”,在正文中只写出补充内容。
3.将"代码"和"结果"一起放在[code]……[/code]中:最好附上例子。
如下:
代码:……
如果有疑问,请另发新帖。请不要粘贴与此主题不符的帖子,包括评论。 </P>
<P> //---- java小程序(1)
--------------------------------------------
public class <FONT color=#2222dd><b>Class1
</b></FONT>{
public <FONT color=#f73809>static</FONT> <FONT color=#f73809>void</FONT> main(String args[])
{
<FONT color=#f70909>System</FONT>.out.println("新年快乐!");
}
这事最简单的java的Application程序最简单的应用。安装了JDK的,只要打开cmd,运行javac javac Class1.java编译,然后java Class即可显示 新年快乐!这几个字。
</P>
--------------------------------------------
这是用Applet写的。
import java.applet.*;
import java.awt.*;
public class Class2 extends Applet
{
public void paint(Graphics g)
{
g.drawString("新年快乐!",30,40);
}
}
”新年快乐!“这几个字的位置由他后面的数字决定的。
import java.applet.*;//任何Applet程序中都要用到的包
import java.awt.*;//任何Applet图形程序都要用的包
这个是java Applet图性界面输入输出
//---- java小程序(3)
--------------------------------------------
import java.applet.*;
import java.awt.*;
import java.awt.event.*;
public class Class3 extends Applet implements ActionListener
{
Label prompt;
TextField input,output;
public void init()
{
label=new Label("请输入你的名字:");
input=new TextField(6);
output=new TextField(25);
add(label);
add(input);
add(output);
input.addActionListener(this);
}
public void actionPerformed(ActionEvent e)
{
output.setText(input.getText()+",新年快乐!");
}
}
--------------------------------------------
"implements ActionListener" 说明这个类同时还是动作事件(ActionEvent)的监听者
init()是类的一个方法,public 和void都是修饰符,该方法在浏览器调用Java Applet程序时自动执行。
<P>与java Applet程序不同,java application程序没有浏览器提供的现成的图形界面可以直接使用,所以需要首先创建自己的图形界面,如下:
//---- java小程序(4)
--------------------------------------------
import java.awt.*;
import java.awt.event.*;
public class Class4
{
public static void main(String args[])
{
new FrameInOut();
}
}
class FrameInOut extends Frame implements ActionListener
{
Label label;
TextField input,output;</P><P> FrameInOut()
{
super("图形界面的java Application程序!");
label=new Label("请输入你的名字:");
input=new TextField(6);
output=new TextField(25);
setLayout(new FlowLayout());
add(label);
add(input);
add(output);
input.addActionListener(this);
setSize(300,200);
show();
}
public void actionPerformed(ActionEvent e)
{
output.setText(input.getText()+",新年快乐!");
}
}
--------------------------------------------
其中FrameInOut类是java.awt包中的窗框类Frame的子类,用于建立和使用图形界面。
</P> /* 这个例子实现基本的算术运算 */
//---- java小程序(5)
//--------------------------------------------
1. import java.applet.*;
2. import java.awt.*;
3. import java.awt.event.*;
4.
5. public class Arithmetic extends Applet implements ActionListener
6.{
7. Label prompt;
8. TextField input1,input2;
9. Button btn;
10. int a=12,b=53;
11.
12. public void init()
13. {
14. prompt=new Label("Please input two integer numbers:");
15. input1=new TextField(6);
16. input2=new TextField(6);
17. btn=new Button("Calculate");
18. add(prompt);
19. add(input1);
20. add(input2);
21. add(btn);
22. }
23. public void paint(Graphics g)
24. {
25. g.drawString(a+"+"+b+"="+(a+b),15,45);
26. g.drawString(a+"-"+b+"="+(a-b),15,65);
27. g.drawString(a+"*"+b+"="+(a*b),15,85);
28. g.drawString(a+"/"+b+"="+(a/b),15,105);
29. g.drawString(a+"%"+b+"="+(a%b),15,125);
30. }
31. public void actionPerformed(ActionEvent e)
32. {
33. a=Integer.parseInt(input1.getText());
34. b=Integer.parseInt(input2.getText());
35. repaint();
36. }
37.}
//--------------------------------------------
//当用户单击按钮"Calculate"时,程序把输入框的字符串转化为整型数据赋给变量a,b,然后
//通过repaint()方法调用paint()方法。 写的不错!
强力支持! /*应该注意的细节问题*/
/*这次专门讲一下switch语句,大家大家都知道switch语句是多分枝的开关语句,它的一般格式如下:*/
//--------------------------------------------
switch(表达式){
case 判断值1:语句块1 //分支1
case 判断值2:语句块2 //分支2
case 判断值2:语句块3 //分支3
.
.
.
case 判断值n:语句块n //分支n
}
//--------------------------------------------
//值得注意的是,switch语句的每一个case判断,都只负责指明流程分支的入口点,而不负责
//指定分支的出口点,分支的出口点需要程序人员用相应的跳转语句来标明。看下面的例子:
switch(MyNumber){
case 'a': Myscore=5;
case 'b': Myscore=4;
case 'c': Myscore=3;
default: Myscore=0;
}
大家不要小看这个switch语句,说不定你还没注意这点呢?不信,continue!假定Mynumber的值为"a",执行完switch语句后,变量Myscore的值被赋成什么呢?是0,为什么?因为case判断只负责指明分支的入口点,表达式的值与第一个case分支的判断相匹配后,程序的进入第一个分支,将Myscore赋予5.由于没有专门的分支出口,所以流程将继续沿着下面的分支执行下去,最后Myscore的值被赋予0.如果在每一个语句块后面加上了break语句,那么结果就如大家所想:对,是5,而不是0。
//-------------------------------------------- //这次讲个循环语句.学过c语言的人一定知道水仙花数的概念吧,水仙花数是一个3位数,它的
//各位数字的立方和等于这个三位数本身,例如:371=3的立方+7的立方+1的立方,则371就是
//一个水仙花数。怎样来求得水仙花数呢,下面就用java来实现它的求解。
//--------------------------------------------
public class Narcissus
{
public static void main(String args[]){
int i,j,k,n=100,m=1;
while(n<1000)
{
i=n/100; //求百位数
j=(n-i*100)/10; //求十位数
k=n%10; //求个位数
if((Math.pow(i,3)+Math.pow(j,3)+Math.pow(k,3))==n)//求立方和
System.out.println("找到第"+ m++ +"水仙花数:"+n);
n++;
}
}
}
//-------------------------------------------- //--------------------------------------------
[CODE]
//调用函数时的别名问题
class Letter
{
char c;
}
public class PassObject{
static void f(Letter y){
y.c='z';
}
public static void main(String[] args)
{
Letter x=new Letter();
x.c='a';
System.out.println("1: x.c:"+x.c);
f(x);
System.out.println("2: x.c:"+x.c);
}
}
//
f()会在函数范围内为其引数Letter y制作一份副本,但现在传入的是个reference,所以这一行:y.c='z';
实际上会更动f()到范围外的那个原本对象。程序结果说明了这点:
1: x.c: a
2: x.c: z
[/CODE]
//-------------------------------------------- 都是 高手啊[em03] <P>//这是个获取当前时间的简单实例,如下:
//--------------------------------------------
import java.util.*;
import java.text.*; </P><P>public class NowString {
public static void main(String[] args) {
Date now = new Date();
DateFormat d = DateFormat.getDateInstance();
String str = d.format(now);
System.out.println("Today is " + str);
}
}
//--------------------------------------------
</P> //-------java小程序(6)
//输入一个整数,然后输出各位数的数值.如下:
//--------------------------------------------
import java.io.*;
class GetNumber
{
private static InputStreamReader isr; //用作键盘输入
private static BufferedReader in;
private static String inputValue;
private static String getString() //此函数用于在键盘输入一个字符串
{
isr=new InputStreamReader(System.in);
in=new BufferedReader(isr);
System.out.print("请输入任意不超过long整型数:");
try
{
inputValue=in.readLine();
}
catch(Exception e)
{
System.out.println("输入出错!");
}
return inputValue;
}
private static int getLength(String str) //此函数用于返回字符
{
return str.length();
}
private static long toLong(String str) //将字符串转成长整型
{
return Long.parseLong(str);
}
private static void outPut(long value,int l)
{
int bit=1;
for(int i=1;i<l;i++)
{
bit*=10;
}
for(;l>0;l--)
{
System.out.println("第"+l+"位上的数字是:"+value/bit);
value-=(value/bit)*bit;
bit/=10;
}
}
public static void main(String[] args)
{
String stringValue;
stringValue=getString();
int l=getLength(stringValue);
long longValue=toLong(stringValue);
outPut(longValue,l);
//System.out.println("Hello World!");
}
}
原理:如输入一个3位数693:
则
百位数=693/100;
十位数=(693-100*6)/10;
个位数=(693-100*6)%10;
//-------------------------------------------- //-------java小程序(7)
//打印1~100的素数,并求出他们的和!
public class ss {
public static void main(String[] args) {
int s=0;
System.out.print("1 ");
for (int i=2;i<101;i=i+1) {
int a=0;
for (int j=2;j<101;j=j+1) {
if (i%j==0) {
a++;
s+=i;
}
}
if (a==1) {
System.out.print( i + " " );
}
}
System.out.println(" ");
System.out.println("1-100之间素数的和为"+s);
}
} //-------java小程序(8)
//画正弦曲线的程序
//--------------------------------------------
import java.applet. *;
import java.awt.*;
import java.awt.event.*;
public class zxqx extends Applet implements ActionListener
{
int x,y;
double a;
Button bn1=new Button("Sin波形");
Button bn2=new Button("清除");
public void init()
{
add(bn1);
add(bn2);
bn1.addActionListener(this);
bn2.addActionListener(this);
}
public void actionPerformed(ActionEvent e)
{
Graphics g=getGraphics();
if(e.getSource()==bn1)
{
for(x=0;x<=360;x+=9)
{
a=Math.sin(x*Math. PI/180);
y=(int)(80+40*a);
g.drawString("*",x,y);
}
}
if(e.getSource()==bn2)
repaint();
}
}
//-------------------------------------------- <FONT color=#f73809><b><U>注意</U></b></FONT>:运行以上的Applet程序时,应用IE或Netscape打开网页,用腾讯的TT不能运行,因为TT中没有集成JVM. <FONT face=宋体 size=3>//各种数字类型转换成字符串型:
String s = String.valueOf( value); //其中value为任意一种数字类型。
字符串型转换成各种数字类型:
String s = "169";
byte b = Byte.parseByte( s );
short t = Short.parseShort( s );
int i = Integer.parseInt( s );
long l = Long.parseLong( s );
Float f = Float.parseFloat( s );
Double d = Double.parseDouble( s );
数字类型与数字类对象之间的转换:
byte b = 169;
Byte bo = new Byte( b ); //bo为类对象
b = bo.bytevalue();
short t = 169;
Short to = new Short( t ); //to类似bo,以下都类似
t = to.shortvalue();
int i = 169;
Integer io = new Integer( i );
i = io.intvalue();
long l = 169;
Long lo = new Long( l );
l = lo.longvalue();
float f = 169f;
Float fo = new Float( f );
f = fo.floatvalue();
double d = 169f;
Double dObj = new Double( d );
d = dObj.doublevalue();
实际应用中还有可能会用到各数字类型与字节数组间的转换, Java 没有直接提供这样的支持。
</FONT> //-------java小程序(9)
//此程序实现画线或填充图形(矩形,圆形)等
//--------------------------------------------
import java.applet.Applet;
import java.awt.Graphics;
public class Ex6_1 extends Applet
{
public void paint(Graphics g)
{
g.drawRect(0,0,200,300);
g.drawLine(0,0,300,400);
g.drawRoundRect(20,20,200,300,30,400);
g.fillRect(40,80,50,90);
g.drawOval(150,120,70,40);
g.fillOval(100,100,200,200);
g.drawString("They are figures",400,300);
}
}
//-------------------------------------------- <P>//下面举几个数组实例:
//--------------------------------------------
public class Array1 {
public static void main(String[] args) {
int[] a1 = {10,20,30,40,50};
for (int i = 0; i < a1.length; ++i)
System.out.print(a1[i] + " ");
System.out.println();
}
}
//一维数组比较简单,下面举个三行两列的二维数组,如下:
public class Array2 {
public static void main(String[] args) {
int[][] a2 = {{1,2}, {3,4}, {5,6}};
for (int j = 0; j < a2.length; ++j) //a2.length为3
{
for (int k = 0; k < a2[j].length; ++k)//a2[j].length为2
System.out.print(a2[j][k] + " ");
System.out.println();
}
}
}</P><P>//这个是3维数组的例子
public class Array3 {
public static void main(String[] args) {
int[] a1 = {10,20,30,40,50};
int[][] a2 = {{1,2}, {3,4}, {5,6}}; //对于多维数组的定义,定义时一定要定义列数,此数组
//定义为2列
int[][][] a3 = new int[2][][];
a3[0] = a2;
a3[1] = new int[2][];
a3[1][0] = a1;
a3[1][1] = new int[1];
a3[1][1][0] = 99;
for (int p = 0; p < a3.length; ++p) {
for (int q = 0; q < a3[p].length; ++q) {
for (int r = 0; r < a3[p][q].length; ++r)
System.out.print(a3[p][q][r] + " ");
System.out.println();
}
System.out.println();
}
System.out.println();
}
}
//--------------------------------------------</P> //标号(label)在c语言中一般很少用,而利用循环语句或条件语句来实现跳转,在java中可有
//label,举个简单的例子:
//--------------------------------------------
public class Label {
public static void main(String[] args) {
outer:
for (int i = 0; i < 4; ++i) {
for (int j = 0; j < 4; ++j) {
System.out.println("i: " + i + ", j: " + j);
if (i + j == 2)
continue outer;
if (i + j == 4)
break outer;
}
}
}
}
//--------------------------------------------
//当i+j等于4时循环才结束.
[QUOTE]
<FONT size=4>//求各数据类型的最值
//--------------------------------------------
class Limits {
public static void main(String[] args) {
System.out.println("Byte: [" +
Byte.MIN_VALUE + "," +
Byte.MAX_VALUE + "]");
System.out.println("Short: [" +
Short.MIN_VALUE + "," +
Short.MAX_VALUE + "]");
System.out.println("Integer: [" +
Integer.MIN_VALUE + "," +
Integer.MAX_VALUE + "]");
System.out.println("Long: [" +
Long.MIN_VALUE + "," +
Long.MAX_VALUE + "]");
System.out.println("Float: [" +
Float.MIN_VALUE + "," +
Float.MAX_VALUE + "]");
System.out.println("Double: [" +
Double.MIN_VALUE + "," +
Double.MAX_VALUE + "]");
}
}
[/QUOTE]
//--------------------------------------------
//以后的程序都用"引用"发表,字体放大些,这样看起来没那么费力。</FONT>
