Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Помогите,пожалуйста покорректировать код, Помогите новечку =( 
:(
    Опции темы
Schast
Дата 22.12.2012, 19:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 1
Регистрация: 22.12.2012

Репутация: нет
Всего: нет



Всем Доброго времени суток! Я еще только начинаю изучать 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();
    }
}


Это сообщение отредактировал(а) jk1 - 23.12.2012, 07:00
PM MAIL   Вверх
dorogoyIV
Дата 25.12.2012, 12:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1503
Регистрация: 26.3.2007

Репутация: 3
Всего: 46



решение не совсем доделанное  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);}});
 }
}

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0593 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.