3、 编写一个Java GUI应用程序,窗口标题为“GridLayout”,窗口布局如下图A所示,在图A窗口中单击任意一个Button,网格的划分方式会变化为图B;在图B窗口中单击任意一个Button,网格的划分方式会变化为图A。(25分)(如果看不见图的话麻烦搜一下ITAT)http://www.itatedu.com/itatCompete/compete5/fiels5/Java4fs.htm 图A 图B
附加题:5、 某企业为了促销,搞抽奖宣传活动,奖品为新款手机一部,抽奖规则如下:
(1)有n个盒子摆成一圈,盒子按顺时针方向依次编号为0,1,2,……,n-1。手机随机放在其中一个盒子中。(n为自然数)
(2)从0号盒子开始摸奖,顺时针方向计数,每遇到第m个盒子就摸奖一次。(m为自然数,m<n)
(3)直到重新摸到0号盒子为止。
例如n=5,m=3,那么摸奖经过的盒子编号依次为0,3,1,4,2,0。
请编写一个完整的程序,随机输入n,m(m<n),程序分析手机有没有不被抽中的机会?如果有,概率是多少? (概率=不被抽中的可能数/n)(30分)6、 采用UDP协议,编写一个Java网络应用程序,该应用分服务器端程序和客户端程序两部分。客户端指定一个服务器上的文件名,让服务器发回该文件的内容,或者提示文件不存在。(20分)(服务端程序和客户端程序分别命名为Server.java和Client.java)

解决方案 »

  1.   

    第一题做了一下
    import java.awt.*;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;import javax.swing.*;
    public class guiTest implements ActionListener{
    private JFrame frame;
    private JButton[] buttons;
    private boolean flag;
    public guiTest(){
    flag=true;
    frame=new JFrame();
    frame.setLayout(new GridLayout(2,3));
    buttons=new JButton[6];
    for(int i=0;i<6;i++){
    buttons[i]=new JButton(i+"");buttons[i].addActionListener(this);
    frame.add(buttons[i]);
    }

    frame.setSize(400,300);
    frame.setLocation(200,300);
    frame.setVisible(true);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }
    public static void main(String[] args) {
    new guiTest(); }
    @Override
    public void actionPerformed(ActionEvent e) {
    if(flag){
    frame.repaint();
    frame.setLayout(new GridLayout(3,2));
    for(int i=0;i<6;i++){
    frame.add(buttons[i]);
    }
    frame.setVisible(true);
    flag=false;
    }else{
    frame.repaint();
    frame.setLayout(new GridLayout(2,3));
    for(int i=0;i<6;i++){
    frame.add(buttons[i]);
    }
    frame.setVisible(true);
    flag=true;
    }


    }}
    测试过了,满足LZ的要求
      

  2.   

    1,3就不说了比较简单 
    第二题给个思路 判断是否能中奖
    如果设 n,m的最小公倍数为minList list = new LinkedList();
    for(int i=m int j=n; i<=min; i+=m){
         if(i>j){
               j+=n;
         }
         list.add(n-m);
    }
    //做完了,判断list里面包含0,1,2,3...n-1这些就有可能中奖
    //不被抽中概率好像就是 n-1/n//加点理解 觉得好像互质的n,m才可能
    //LinkList 可以换成 实现了sorted和set接口的集合 
      

  3.   


    呵呵 bao110908和严格待人啊 其实也对
    所以大家就讨论下 第二题有没有比较好点的思路吧
      

  4.   

    ~~
    ITAT听说过,很重要的比赛吗?没参加过,不过看这题,都是和网络编程有关啊
      

  5.   

    0%n  m%n 2m%n ...  am%n (a+1)m%n  ...0    m   2m   ...   n-b  n-b+m    ....
    n=am+b;
      

  6.   


    这样可不太好 我就是因为不想帮人完成任务把代码的思想贴出来了 看别人答案这样对你没有好处 
    我在前面已经提出了一种可行方法 你自己做做不就OK了 
    6题看看IO流和嵌套字编程不就出来了吗 
      

  7.   

    我晕,itat怎么还是这几个题啊,我去年就只做了98分.而录取却是100分.呜呜
      

  8.   

    我也考了ITAT,不过为什么我这里还没到复赛时间呀。难道地方不一样考试时间不同?LZ可以把你考的题目发给我么。我做做看什么感觉呀
      

  9.   

    不是呀 是往届的题而以  我确实没学过什么网络编程什么的只学过一些简单的java SE 基础 那题对我来说算是天文了 即使把代码发给我 要研究透他还很困难呢 
    自己写(说实话还没那个能力呢 )
      

  10.   

    哦。31号复赛。不知道ITAT考了有什么用。看了说有证。过了初赛也说可以要证,交80.
    那ITAT的证有用么我想问
      

  11.   

    第五题public void GetResult()
    {
    HashSet<Integer> set = new HashSet<Integer>();
    set.add(0);
    for(int k = 1; (k*m) % n != 0; k++)
    {
    set.add((k*m) % n);
    }
                    if(n == set.size())
                       System.out.println("一定会被抽中");
                    else{
       float result = (n - set.size())/(float)n;
                       System.out.println("不被抽中的概率为:" + result);
                    }
                    
               }
      

  12.   

    import java.util.*;
    /*5、 某企业为了促销,搞抽奖宣传活动,奖品为新款手机一部,抽奖规则如下: 
    (1)有n个盒子摆成一圈,盒子按顺时针方向依次编号为0,1,2,……,n-1。手机随机放在其中一个盒子中。(n为自然数) 
    (2)从0号盒子开始摸奖,顺时针方向计数,每遇到第m个盒子就摸奖一次。(m为自然数,m <n) 
    (3)直到重新摸到0号盒子为止。 
    例如n=5,m=3,那么摸奖经过的盒子编号依次为0,3,1,4,2,0。 
    请编写一个完整的程序,随机输入n,m(m <n),程序分析手机有没有不被抽中的机会?如果有,概率是多少? (概率=不被抽中的可能数/n)(30分)*/
    public class Test3{
        public static void main(String[] args) {
          
            System.out.println("不被摸中的概率是:"+guess(5,3));
        }
        public static double guess(int n,int m){
            boolean[] isHit=new boolean[n];
            int count=0;//不被摸中的盒子数。
            int currentBox=0;
            int times=0;
            System.out.println("被摸到的盒子编号为");
            do{
                System.out.println(currentBox);
                isHit[currentBox]=true;
                times++;
                currentBox=(m*times)%n;
            }while(currentBox!=0);
            for(boolean b:isHit){
                if(!b){
                    count++;
                }
            }
            return (double)count/n;
        }
        
    }
      

  13.   

    /*5、 某企业为了促销,搞抽奖宣传活动,奖品为新款手机一部,抽奖规则如下: 
    (1)有n个盒子摆成一圈,盒子按顺时针方向依次编号为0,1,2,……,n-1。手机随机放在其中一个盒子中。(n为自然数) 
    (2)从0号盒子开始摸奖,顺时针方向计数,每遇到第m个盒子就摸奖一次。(m为自然数,m <n) 
    (3)直到重新摸到0号盒子为止。 
    例如n=5,m=3,那么摸奖经过的盒子编号依次为0,3,1,4,2,0。 
    请编写一个完整的程序,随机输入n,m(m <n),程序分析手机有没有不被抽中的机会?如果有,概率是
    多少? (概率=不被抽中的可能数/n)(30分)*/ 
    import java.util.Iterator;
    import java.util.Scanner;class Circle {
     private Entry header = null;
     private int size = 0; public Circle(int capacity) {
      for (int i = 0; i < capacity; ++i)
       add();
     } private void add() {
      Entry newEntry = new Entry(size++);
      if (header == null) {
       header = newEntry;
       header.previous = header.next = header;
      } else {
       header.previous.next = newEntry;
       newEntry.previous = header.previous;
       header.previous = newEntry;
       newEntry.next = header;
      }
     } public int size() {
      return size;
     } public Iterator<Integer> circleIterator() {
      return new CircleIterator(header);
     } private class CircleIterator implements Iterator<Integer> {
      private Entry current;  CircleIterator(Entry start) {
       current = start;
      }  public boolean hasNext() {
       return current != null;
      }  public Integer next() {
       if (hasNext()) {
        int label = current.label;
        current = current.next;
        return label;
       }
       return null;
      }  public void remove() {
       if (current != null) {
        Entry e = current.previous;
        if (e == header)
         header = e.next;
        e.next.previous = e.previous;
        e.previous.next = e.next;
        --size;
       }
      } } private static class Entry {
      int label;
      Entry previous, next;  Entry(int label) {
       this.label = label;
      }
     }
    }public class TestQiye {
     public static void main(String[] args) {
      Scanner scanner = new Scanner(System.in);
      System.out.println("enter m and n");
      int n = Integer.parseInt(scanner.next()), m = Integer.parseInt(scanner.next());
      int count = 0;
      Circle circle = new Circle(n);
      Iterator<Integer> iterator = circle.circleIterator();
      iterator.next();
      do {
       for (int i = 1; i < m; ++i)
        iterator.next();
       ++count;
      } while (iterator.next().intValue() != 0);  System.out.println(((double) (n-count)) / n);
     }
      

  14.   

    图没抽筋呀 就是有间隔的 
    好几套题都是这个样子的呀那个图就是引用的ITAT的图
      

  15.   


    import java.net.*;
    import java.io.*;public class SampleServer extends Thread
    {
    static BufferedReader in;
    static PrintWriter out;

        public static void main(String[] arges)
        { 
    try
    {
      int port = 5678;
      //使用5678端口创建一个ServerSocket
      ServerSocket mySocket = new ServerSocket(port);
      //等待监听是否有客户端连接
      Socket sk = mySocket.accept();
      //接受从客户端过来的数据流
      BufferedReader in = new BufferedReader(new InputStreamReader(sk.getInputStream ()));
      //发送服务器端给客户端的数据流
      PrintWriter out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(sk.getOutputStream ())),true);
      
     // BufferedReader buf = new BufferedReader(new InputStreamReader(System.in));
     while(true)
         {
         System.out.println ("客户端信息:"+in.readLine());
         out.println ("receive:I have accept your information");  
         }
     }
     catch(Exception e)
     {  
    System.out.println("客户端已经退出!");
     }

    }

    }
    import java.io.*;
    import java.net.*; public class SampleClient
    {
        public static void main(String[] arges) 
    {
    try
    {
      //获取一个IP。null表示本机
     InetAddress addr = InetAddress.getByName(null);
      //打开5678端口,与服务器建立连接
     Socket sk = new Socket ("172.20.9.79", 5678);
      //缓存输入
     BufferedReader in = new BufferedReader(new InputStreamReader(sk.getInputStream ()));
      //缓存输出
     PrintWriter out = new PrintWriter (new BufferedWriter(new OutputStreamWriter(sk.getOutputStream ())),true);
     //向服务器发送信息
                 
     BufferedReader buf = new BufferedReader(new InputStreamReader(System.in));
     String str = "";
     while(true)
    {
     System.out.print("客户端:");
     str = buf.readLine();
     if(str.equals("end"))break;
     out.println (str);
     //接收服务器信息
     System.out.println ("服务器端信息:"+in.readLine ());
    }
    }
    catch(Exception e)
    {
      System.out.println(e);
    }
        }
    }
      

  16.   

    这个不可以的  虽然思想很好   但是结果不正确    
    比如n=7 m=3   本应该放进set里的为 0,3,6,2,0
                 而此程序为 0,3,6,2,5     其实2和5中的3已经到了set中   则此次只跳过了一个数
      

  17.   

    package MyTest;/**
     *
     * @author Administrator
     */
    public class Test16 {
        public static void main(String args[]){
            WindowTest01 t=new WindowTest01();
        }
    }
    package MyTest;import java.awt.Button;
    import java.awt.GridLayout;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import javax.swing.JFrame;/**
     *
     * @author Administrator
     */
    public class WindowTest01 extends JFrame implements ActionListener{
        Button b1,b2,b3,b4,b5,b6;
        boolean flag=true;
        public WindowTest01(){
            init();
            setBounds(100,100,200,200);
            setVisible(true);
            setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        }    private void init() {
            setLayout(new GridLayout(3,2));
            b1=new Button("one");
            b2=new Button("two");
            b3=new Button("three");
            b4=new Button("four");
            b5=new Button("five");
            b6=new Button("six");
            add(b1);
            add(b2);
            add(b3);
            add(b4);
            add(b5);
            add(b6);
            b1.addActionListener(this);
            b2.addActionListener(this);
            b3.addActionListener(this);
            b4.addActionListener(this);
            b5.addActionListener(this);
            b6.addActionListener(this);
        }    @Override
        public void actionPerformed(ActionEvent e) {
            if(flag){
                repaint();
                setLayout(new GridLayout(2,3));
                add(b1);
                add(b2);
                add(b3);
                add(b4);
                add(b5);
                add(b6);
                setVisible(true);
                flag=false;
            }
            else{
                repaint();
                setLayout(new GridLayout(3,2));
                add(b1);
                add(b2);
                add(b3);
                add(b4);
                add(b5);
                add(b6);
                setVisible(true);
                flag=true;
            }
        }
        
    }