当前位置: 代码迷 >> Java相关 >> [公告]java起步篇
  详细解决方案

[公告]java起步篇

热度:444   发布时间:2005-01-19 00:33:00.0

[QUOTE] //-------java小程序(10) //注:以下语句值得细细揣摩: char c=(char)(Math.random()*26+'a'); Math.random()会得到一个double值,所以26会被转化为double型以利乘法运算,而两者乘积也为double,这就意味着字符'a'也要转化为double型,最后将double值转化为char。 将double转化为char的过程会进行哪些操作呢?如将29.7转型至char,得到的是30还是29?这问题的答案可由下例得到: //-------------------------------------------- public class CastingNumbers{

public static void main(String[] args)

{ double above=29.7,below=0.3; System.out.println("above:"+above); System.out.println("below:"+below); System.out.println("(int)above:"+(int)above); System.out.println("(int)below:"+(int)below); System.out.println("(char)above:"+(char)above); System.out.println("(char)below:"+(char)below); } } [/QUOTE] //--------------------------------------------


----------------解决方案--------------------------------------------------------
[QUOTE]//这个问题与Math.random()有关。它所产生的介于0和1之间的值,究竟包不包括1?用数学行 //话来说就是究竟是(0,1),[0,1),(0,1],还是[0,1]? //看下面的例子,我们一起来测试一下: public class RandomBounds{ static void Usage(){ System.out.println("Usage:\n\t"+"RandomBounds lower\n\t"+"RandomBounds upper"); System.exit(1); } public static void main(String[] args) { if(args.length!=1) Usage(); if(args[0].equals("lower")){ while(Math.random()!=0.0) System.out.println("为 0.0!"); } else if(args.equals("upper")){ while(Math.random()!=1.0) System.out.println("为1.0"); } else Usage(); } } [/QUOTE] :执行此命令,只须键入以下二者之一 java RandomBounds lower 或 java RandomBounds upper
----------------解决方案--------------------------------------------------------

//-------------------------------------------- import java.applet.Applet; import java.awt.*; import java.awt.event.*; public class Ex6 extends Applet implements ActionListener { Label prompt=new Label("Please input your number:"); TextField input=new TextField(6); Button sortbtn=new Button("Sort"); int[] DataArray=new int[10]; int DataInputed=0; int[][] SortPro=new int[11][10]; public void init() { add(prompt); add(input); add(sortbtn); input.addActionListener(this); sortbtn.addActionListener(this); } public void paint(Graphics g) { for(int i=0;i<SortPro.length;i++) for(int j=0;j<SortPro[i].length;j++) g.drawString(Integer.toString(SortPro[i][j]),10+30*j,40+20*i); } public void actionPerformed(ActionEvent e) { if(e.getSource()==input) { DataArray[DataInputed++]=Integer.parseInt(input.getText()); if(DataInputed<10) { prompt.setText("Had entered"+DataInputed+"number,please continue.."); input.setText(""); } else { prompt.setText("Had entered ten number"); input.setVisible(false); } } if(e.getSource()==sortbtn) { for(int i=0;i<DataArray.length;i++) SortPro[0][i]=DataArray[i]; SortProcedure(); repaint(); } } void SortProcedure() { int pass,i,temp,exchangeCnt; for(pass=0;pass<DataArray.length;pass++) { exchangeCnt=0; for(i=0;i<DataArray.length-pass-1;i++) { if(DataArray[i]>DataArray[i+1]) { temp=DataArray[i]; DataArray[i]=DataArray[i+1]; DataArray[i+1]=temp; exchangeCnt++; } } for(i=0;i<DataArray.length;i++) SortPro[pass+1][i]=DataArray[i]; if(exchangeCnt==0) return; } } }

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


----------------解决方案--------------------------------------------------------

//这是个获取当前时间的例子 //-------------------------------------------- import java.util.*; import java.text.*;

public class NowString { public static void main(String[] args) { Date now = new Date(); DateFormat df = DateFormat.getDateInstance(); String s = df.format(now); System.out.println("Today is " + s); } } //--------------------------------------------


----------------解决方案--------------------------------------------------------
JAVA正则表达式4种常用功能 正则表达式在字符串处理上有着强大的功能,sun在jdk1.4加入了对它的支持 下面简单的说下它的4种常用功能: 查询: String str="abc efg ABC"; String regEx="a|f"; //表示a或f Pattern p=Pattern.compile(regEx); Matcher m=p.matcher(str); boolean rs=m.find(); 如果str中有regEx,那么rs为true,否则为flase。如果想在查找时忽略大小写,则可以写成Pattern p=Pattern.compile(regEx,Pattern.CASE_INSENSITIVE); 提取: String regEx=".+\\\\(.+)$"; String str="c:\\dir1\\dir2\\name.txt"; Pattern p=Pattern.compile(regEx); Matcher m=p.matcher(str); boolean rs=m.find(); for(int i=1;i<=m.groupCount();i++){ System.out.println(m.group(i)); } 以上的执行结果为name.txt,提取的字符串储存在m.group(i)中,其中i最大值为m.groupCount(); 分割: String regEx="::"; Pattern p=Pattern.compile(regEx); String[] r=p.split("xd::abc::cde"); 执行后,r就是{"xd","abc","cde"},其实分割时还有跟简单的方法: String str="xd::abc::cde"; String[] r=str.split("::"); 替换(删除): String regEx="a+"; //表示一个或多个a Pattern p=Pattern.compile(regEx); Matcher m=p.matcher("aaabbced a ccdeaa"); String s=m.replaceAll("A"); 结果为"Abbced A ccdeA" 如果写成空串,既可达到删除的功能,比如: String s=m.replaceAll(""); 结果为"bbced ccde" 附: \d 等于 [0-9] 数字 \D 等于 [^0-9] 非数字 \s 等于 [ \t\n\x0B\f\r] 空白字元 \S 等于 [^ \t\n\x0B\f\r] 非空白字元 \w 等于 [a-zA-Z_0-9] 数字或是英文字 \W 等于 [^a-zA-Z_0-9] 非数字与英文字 ^ 表示每行的开头 $ 表示每行的结尾
----------------解决方案--------------------------------------------------------
下面介绍JAVA的输入 java与C和C++相比而言,JAVA的输入就挺复杂的了。好吧我们一步一步的深入研究吧。这篇文章将讨论输入char, int, double 和String类型(String不是JAVA内置的类型)。JAVA中的IO有一整个包。我前一周搞输入搞得晕死了,看JAVA的API看的我眼冒金星,嘎嘎。 先从最简单的char输入开始吧。对于每一个java程序,编译器会自动加载java.lang。这个包中包含了一个键盘输入流System.in(1),我们使用read()方法可以从键盘上读入一个char。代码如下 char input=(char)System.in.read(); 这个方法的返回的是一个和char相对于的int所以要强制转化为char.。之所以要返回int是因为输入流的结尾是用-1表示的,而char无法表示-1。不过用这个输入在实践中有很多毛病,不提倡使用。好的下面我们使用java.io中的类来进行输入。 我问用到InputStreamReader类。前面我提到了System,in是一个键盘输入流(说明看我的注解)我们使用这个构造方法 InputStreamReader(InputStream in),代码如下 InputStreamReader input = new InputStreamReader(System.in) char inputC= (char)input.read(); (1)in public static final InputStream in The "standard" input stream. This stream is already open and ready to supply input data. Typically this stream corresponds to keyboard input or another input source specified by the host environment or user. 以上是在java.lang 下System类中 in的说明 String的输入: 上一次的文章中所用的InputStreamReader类,一次只能从输入流一个char如果有很多的字符一起输入不是要读入N次。这里我们要用到缓存(Buffer)好的,输入String我们要使用两个类一个是上面用过的InputStreamReader类用来读输入流,还要一个是新的类BufferedReader类。我们用这个构造方法BufferedReader(Reader in)。看看怎么输入一个String吧 BufferedReader stdin =new BufferedReader(new InputStreamReader(System.in)); input=stdin.readLine(); 其中readLine()方法就是读入一行,并返回String 现在我们只要能能把String转化为int和double 就可以了 在类int ,double 下有这两个方法parseInt(String s) ,和parseDouble(String s) 使用这两个方法就可以实现int 和double的输入了。 上面是对输入时所使用的IO包的基本介绍,在实际中直接使用上面的语句,是无法编译和运行的,因为有异常的存在。(Exception)的存在。异常是一种runtime errors(不懂怎么翻译成中文)比如int a= b/h; 当 h==0时,就是runtime error 。java 中有一个类就是 Exception,用来处理异常的。程序要么在存在可能的异常的情况下运行,用throws 要么用try… catch…来捕捉异常。 好了,回到我们的输入上来吧,因为在输入可能没有准备好,比如无法找到键盘。 。所以程序必须使用throws或 try …catch…去捕捉异常,并做出处理方法。 下面是完整的Input输入类的源码 import java.io.*; class Input{//class to input public static String getString(){//use static make a class method to read a Sring from kedboard String input=""; BufferedReader stdin =new BufferedReader(new InputStreamReader(System.in)); try{ input=stdin.readLine(); } catch(IOException iox) { System.err.println(iox); } return input; } public static char getChar()throws java.io.IOException{//class method to read a char from keyboard char data; while(true){ String input=getString();//get a line input if (input.length()>1) { //catch the too much of the input System.err.println("You must enter a single character"); System.err.println("Please enter again"); continue; } else { data=input.charAt(0) ; return data; } } } public static double getDouble( ) throws java.io.IOException { double data; String input = getString(); while(true) { try{ data=Double.parseDouble(input); return data; } catch(NumberFormatException nfe){//catch the no-number char exception System.err.println("Not a double number please Enter again"); continue; } } } public static int getInt( ) throws java.io.IOException { int data; String input = getString(); while(true) { try{ data=Integer.parseInt(input); return data; } catch(NumberFormatException nfe){//catch the no-number char exception System.err.println("Not a integer number please Enter again"); continue; } } }
----------------解决方案--------------------------------------------------------
//-------java小程序(11) //树形目录的应用 import java.awt.*; import java.awt.event.*; import javax.swing.*; import javax.swing.tree.*;public class JtreeDemo extends JApplet { /** Initialization method that will be called after the applet is loaded * into the browser. */ JTree tree; JTextField jtf; public void init() { // TODO start asynchronous download of heavy resources Container cp=getContentPane(); cp.setLayout(new BorderLayout()); DefaultMutableTreeNode top=new DefaultMutableTreeNode("Top"); DefaultMutableTreeNode a=new DefaultMutableTreeNode("A"); DefaultMutableTreeNode a1=new DefaultMutableTreeNode("A1"); DefaultMutableTreeNode a2=new DefaultMutableTreeNode("A2"); DefaultMutableTreeNode a3=new DefaultMutableTreeNode("A3"); a.add(a1); a.add(a2); a.add(a3); DefaultMutableTreeNode b=new DefaultMutableTreeNode("B"); DefaultMutableTreeNode b1=new DefaultMutableTreeNode("B1"); DefaultMutableTreeNode b2=new DefaultMutableTreeNode("B2"); DefaultMutableTreeNode b3=new DefaultMutableTreeNode("B3"); b.add(b1); b.add(b2); b.add(b3); DefaultMutableTreeNode c=new DefaultMutableTreeNode("C"); DefaultMutableTreeNode c1=new DefaultMutableTreeNode("C1"); DefaultMutableTreeNode c11=new DefaultMutableTreeNode("C11"); DefaultMutableTreeNode c12=new DefaultMutableTreeNode("C12"); DefaultMutableTreeNode c13=new DefaultMutableTreeNode("C13"); DefaultMutableTreeNode c14=new DefaultMutableTreeNode("C14"); c1.add(c11); c1.add(c12); c1.add(c13); c1.add(c14); DefaultMutableTreeNode c2=new DefaultMutableTreeNode("C2"); DefaultMutableTreeNode c3=new DefaultMutableTreeNode("C3"); c.add(c1); c.add(c2); c.add(c3); top.add(a); top.add(b); top.add(c); tree=new JTree(top); int v=ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED; int h=ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDED; JScrollPane jsp=new JScrollPane(tree,v,h); cp.add(jsp,BorderLayout.CENTER); jtf=new JTextField(20); cp.add(jtf,BorderLayout.SOUTH); tree.addMouseListener(new MouseAdapter(){ public void mouseClicked(MouseEvent me){ doMouseClicked(me); } }); } public void doMouseClicked(MouseEvent me) { TreePath tp=tree.getPathForLocation(me.getX(), me.getY()); if(tp!= null) jtf.setText(tp.toString()+"energy"); else jtf.setText("energy"); } // TODO overwrite start(), stop() and destroy() methods }
----------------解决方案--------------------------------------------------------
//-------java小程序(12) //JTable的应用 import java.awt.*; import javax.swing.*;public class Jtable extends JApplet { /** Initialization method that will be called after the applet is loaded * into the browser. */ public void init() { // TODO start asynchronous download of heavy resources Container cp=getContentPane(); cp.setLayout(new BorderLayout()); final String[] conHeads={"Name","Phone","Age"}; final Object[][] data={ {"java程序","879546","22"}, {"wnsaaa777","987455","23"}, {"Ttable","45454554","78"}, {"dddd","1212121","54"}, {"sssss","154855","12"}, {"ffdfs","789878","65"} }; JTable jt=new JTable(data,conHeads); int v=ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED; int h=ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDED; JScrollPane jsp=new JScrollPane(jt,v,h); cp.add(jsp,BorderLayout.CENTER); } 以后的帖子不再放大字体。
----------------解决方案--------------------------------------------------------
//-----------Java Application启动画面的制作


  软件启动时有一个启动画面,在所有的初始化工作都完成之后,启动画面消失,继而可以开始使用。
可按以下步骤来做:
  1、新建一个启动画面Window类

  java.awt.Window windowSplash;

  2、调用prepareSplash()函数,初始化启动界面

  private void prepareSplash()
 {
    Toolkit toolkit = Toolkit.getDefaultToolkit();
    windowSplash = new Window( this );
    Image image = toolkit.getImage( "images" + File.separator + "splash.gif" );
    ImageCanvas canvas = new ImageCanvas( image );
    windowSplash.add( canvas, "Center" );
    Dimension scmSize = toolkit.getScreenSize();
    int imgWidth = image.getWidth( this );
    int imgHeight = image.getHeight( this );
    windowSplash.setLocation( scmSize.width/2 - (imgWidth/2), scmSize.height/2 - (imgHeight/2) );
   windowSplash.setSize( imgWidth, imgHeight );
  }

  3、在Application的JFrame类(主界面)中调用startSplash(),显示启动界面,然后初试化JFrame的各个可视化组件,初始化后台数据库等(如数据
库的连接)

  private void startSplash()
  {
    windowSplash.setVisible( true );
   windowSplash.toFront();
  }

  4、在所有的初始化工作完成之后,调用stopSplash()函数,停止显示启动画面

  private void stopSplash()
{
   windowSplash.dispose();
 }

----------------解决方案--------------------------------------------------------
觉得,你在放小应用程序时候,还是解释一下相应的包.还有一些自带函数功能特性,这样看起来更容易,学到的东西也多
----------------解决方案--------------------------------------------------------
  相关解决方案