kingarden 发表于 2005-1-12 12:27

[公告]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>

kingarden 发表于 2005-1-12 12:33

//----  java小程序(2)
--------------------------------------------
这是用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图形程序都要用的包  

kingarden 发表于 2005-1-12 12:55


这个是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程序时自动执行。


         


kingarden 发表于 2005-1-12 13:11

<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>

kingarden 发表于 2005-1-12 20:07

/*     这个例子实现基本的算术运算  */
//----  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()方法。

chensheng913 发表于 2005-1-12 22:31

写的不错!

强力支持!

kingarden 发表于 2005-1-13 09:26

/*应该注意的细节问题*/

/*这次专门讲一下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。


//--------------------------------------------      

kingarden 发表于 2005-1-13 09:49

//这次讲个循环语句.学过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&lt;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++;
       }
    }
}
//--------------------------------------------

kingarden 发表于 2005-1-13 10:07

//--------------------------------------------

[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]

//--------------------------------------------

fanzorro 发表于 2005-1-14 12:38

都是 高手啊[em03]

kingarden 发表于 2005-1-15 10:50

<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>

kingarden 发表于 2005-1-16 09:59

//-------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&lt;l;i++)
      {
         bit*=10;
      }
      for(;l&gt;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;


//--------------------------------------------

kingarden 发表于 2005-1-16 11:19

//-------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&lt;101;i=i+1) {
         int a=0;
         for (int j=2;j&lt;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);      
   }
}

kingarden 发表于 2005-1-17 10:15

//-------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&lt;=360;x+=9)
{
a=Math.sin(x*Math. PI/180);
y=(int)(80+40*a);
g.drawString("*",x,y);
}
}
if(e.getSource()==bn2)
repaint();
}
}
//--------------------------------------------

kingarden 发表于 2005-1-17 10:21

<FONT color=#f73809><b><U>注意</U></b></FONT>:运行以上的Applet程序时,应用IE或Netscape打开网页,用腾讯的TT不能运行,因为TT中没有集成JVM.

kingarden 发表于 2005-1-17 10:39

<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>

kingarden 发表于 2005-1-18 11:30

//-------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);
}
}

//--------------------------------------------

kingarden 发表于 2005-1-18 23:11

<P>//下面举几个数组实例:

//--------------------------------------------
public class Array1 {
    public static void main(String[] args) {
        int[] a1 = {10,20,30,40,50};
        for (int i = 0; i &lt; 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 &lt; a2.length; ++j) //a2.length为3
         {
            for (int k = 0; k &lt; 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 &lt; a3.length; ++p) {
            for (int q = 0; q &lt; a3[p].length; ++q) {
                for (int r = 0; r &lt; a3[p][q].length; ++r)
                    System.out.print(a3[p][q][r] + " ");
                System.out.println();
            }
            System.out.println();
        }
        System.out.println();
    }
}

//--------------------------------------------</P>

kingarden 发表于 2005-1-18 23:29

//标号(label)在c语言中一般很少用,而利用循环语句或条件语句来实现跳转,在java中可有
//label,举个简单的例子:

//--------------------------------------------
public class Label {
    public static void main(String[] args) {
    outer:
        for (int i = 0; i &lt; 4; ++i) {
            for (int j = 0; j &lt; 4; ++j) {
                System.out.println("i: " + i + ", j: " + j);
                if (i + j == 2)
                    continue outer;
                if (i + j == 4)
                    break outer;
            }
        }
    }
}

//--------------------------------------------

//当i+j等于4时循环才结束.

kingarden 发表于 2005-1-18 23:40

[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>

页: [1] 2 3 4 5 6 7 8 9

编程论坛