Всем Доброго времени суток! Я еще только начинаю изучать Java, и столкнулась с такой проблемой. Есть задача, которая заключается в следующем: я загадываю число от 0 до 100, а компьютер должен его угадать. С каждым его предположением я ему отвечаю больше это число, меньше ну или угадал! Мне нужно сделать чтоб этот перебор не просто "тупым" был, а например методом "золотой середины" , т.е. он должен изначально, напривер предполагать , что мое число это 50, а затем если меньше брал бы интервал от 0 до 49 , если больше , то от 51 до 100 и так далее...каждый раз уменьшая диапазон, таким образом о угадает за наименьшее число попвток =) Ну вот как то так! Помогите пожалуйста, очень Вас прошу!!!!! Вот текст программы на эклипсе:
Код | 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(); } }
|
|