Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: Общие вопросы > Помогите,пожалуйста покорректировать код


Автор: Schast 22.12.2012, 19:38
Всем Доброго времени суток! Я еще только начинаю изучать Java, и столкнулась с такой проблемой. 
Есть задача, которая заключается в следующем: я загадываю  число от 0 до 100, а компьютер должен его угадать. С каждым его предположением я ему отвечаю больше это число, меньше ну или угадал! Мне нужно сделать чтоб этот перебор не просто "тупым" был, а например методом "золотой середины" , т.е. он должен изначально, напривер предполагать , что мое число это 50, а затем если меньше брал бы интервал от 0 до 49 , если больше , то от 51 до 100 и так далее...каждый раз уменьшая диапазон, таким образом о угадает за наименьшее число попвток =) Ну вот как то так! Помогите пожалуйста, очень Вас прошу!!!!! smile  smile 
 
Вот текст программы на эклипсе: 

Код

import java.applet.Applet;
import java.awt.GridLayout;
import java.awt.Rectangle;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Random;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;

public class Ygadai extends Applet implements ActionListener{ 
    private static final long serialVersionUID = 1L;

    public JLabel m_guess;//поле вывода
    
    private int guess;
    private int max;
    private int leftGrain;
    private int rightGrain;
    private int attemptCount;//число попыток угадывания
    
    boolean rez;
    
    Random rand;
    
    public Ygadai()
    {
        JFrame form = new JFrame("угадываю числа");
        form.setLayout(new GridLayout(2,5));
        m_guess = new JLabel("Задумайте число от 0 до 100 ");
        
        JButton больше = new JButton("Больше");
        JButton меньше = new JButton("Меньше");
        JButton да = new JButton("Да");
        
        больше.addActionListener(this);
        меньше.addActionListener(this);
        да.addActionListener(this);
        
        form.add(m_guess);
        
        form.add(больше);
        form.add(меньше);
        form.add(да);
        
        form.setBounds(new Rectangle(500,100));
        form.setVisible(true);
        
        leftGrain = 0;
        rightGrain = 100;
        attemptCount = 0;
        
        rand = new Random();
        max = rightGrain - leftGrain;
        guess = rand.nextInt(max) + leftGrain;
        m_guess.setText("Ваше число: "+guess+"? Больше, Меньше или Да?");
        rez = false;
    }
    
    public void nextIter()
    {
        if (attemptCount==11)
            m_guess.setText("Я не угадал.Вы выиграли!");
        else if(rez == true){
            m_guess.setText("Угадал за "+attemptCount+" шагов.");
        }
        else
        {
            max = rightGrain - leftGrain;
            guess = rand.nextInt(max) + leftGrain;
            m_guess.setText("Ваше число: "+guess+"? больше , меньше или да? ");
            
        }
    }
    
    @Override
    public void actionPerformed(ActionEvent arg0) {
        String ev = arg0.getActionCommand();
        if (ev.equals("Больше")) 
        {
            leftGrain = guess;
            attemptCount++;
            nextIter();
        }
        if (ev.equals("Меньше"))  
        {
            rightGrain = guess;
            attemptCount++;
            nextIter();
        }
        if (ev.equals("Да")) 
        {
            rez = true;
            attemptCount++;
            nextIter();
        }

    }
    public static void main(String[] args) 
    {
        new Ygadai();
    }
}

Автор: dorogoyIV 25.12.2012, 12:47
решение не совсем доделанное  smile 
Код

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;
import java.util.*;

public class Main extends JFrame
                  implements ActionListener, PopupMenuListener
{
 private JComboBox numbers = new JComboBox();
 private JComboBox jcb = new JComboBox(new String [] {"", "больше", "меньше"});
 private static final int NUM = 100;
 private int MAX = NUM;
 private int START = 0, END = MAX;
 private int myNum = 0;
 private int comp_number = MAX / 2;
 private JLabel comp_reply = new JLabel("");

 public Main()
 {
  setLayout(new GridLayout(3, 2));

  add(new JLabel("выбери число:"));

  for(int i = 0; i < MAX; i++)
   numbers.addItem(i + 1);

  add(numbers);
  numbers.addActionListener(this);

  add(new JLabel("компьютер сказал: "));
  add(comp_reply);

  add(new JLabel("число компьютера "));
  add(jcb);
  jcb.addPopupMenuListener(this);
 }

 public void actionPerformed(ActionEvent e)
 {
  myNum = Integer.parseInt(numbers.getSelectedItem() + "");
  MAX = NUM;
  comp_number = MAX / 2;
  START = 0;
  END = MAX;
  findNumber(comp_number);
 }

 public void popupMenuWillBecomeInvisible(PopupMenuEvent e)
 {
  int index = jcb.getSelectedIndex();

  if(index == 1)
  {
   END = comp_number;
   MAX = comp_number;
  }

  if(index == 2)
  {
   START = comp_number;
   END = MAX;
  }

  findNumber();
 }

 public void popupMenuWillBecomeVisible(PopupMenuEvent e){}
 public void popupMenuCanceled(PopupMenuEvent e){}

 private void findNumber(int num)
 {
  jcb.setSelectedIndex(0);
  comp_reply.setText(num + "");
 }

 private void findNumber()
 {
  int val = Math.abs(END - START);
  int r = new Random().nextInt(val + 1) + START;
  comp_number = r;
  findNumber(comp_number);
 }

 public static void main(String [] args)
 {
  SwingUtilities.invokeLater(new Runnable() {
   public void run() {
    Main main = new Main();
    main.setDefaultCloseOperation(3);
    main.setBounds(100, 100, 400, 140);
    main.setVisible(true);}});
 }
}

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)