В чём ошибка? Почему не работает? [закрыт]

254
10 декабря 2021, 10:10
Закрыт. Этот вопрос не по теме. Ответы на него в данный момент не принимаются.

Хотите улучшить этот вопрос? Обновите вопрос так, чтобы он вписывался в тематику Stack Overflow на русском.

Закрыт 2 года назад.

Улучшить вопрос
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class DoIKnow {
    int[] location;
    int win = 0;
    void setLocation(int[] myArray) {
        location = myArray;
    }
    String getInput(String promt) {
        String inputLine = null;
        System.out.print(promt + " ");
        try {
            BufferedReader is = new BufferedReader(new InputStreamReader(System.in));
            inputLine = is.readLine();
            if(inputLine.length() == 0) 
                return null;
        } catch(IOException e) {
            System.out.println("IOExpetion: " + e); 
        }
        return inputLine;
    }
    String check(String guess) {
        String result = "Мимо";
        int number = Integer.parseInt(guess);
        if(location[number] ==  1) {
            result = "Попал";
            win++;
            location[number] -= 1;
        }
        if(win == 3) {
            result = "Потопил";
        }
        return result;
    }
    public static void main(String[] args) {
        int numOfGuesses = 0;
        String result;
        DoIKnow game = new DoIKnow();
        int rand = (int) (Math.random()*5);
        int[] arr = new int[7];
        for(int s = 0; s < 3; s++) {
            // цикл для того, чтобы присвоить индексу[rand] 
            // и двум индексам перед ним значение 1
            arr[rand+s] = 1;
        } 
        game.setLocation(arr);
        while(true) {
            result = game.getInput("Введите число");
            result = game.check(result);
            numOfGuesses++;
            if(result.equals("Потопил")) {
                System.out.println("Вам потребовалось " + numOfGuesses + "попыток(и)");
                break;
            }
        }           
    }
}

Ожидаемый результат (примерно):

Пользователь вводит число, если он угадывает (индекс, хранящий значение 1), то возвращает "Попал", если возвращается "Потопил", то код выходит из цикла и показывается, сколько попыток понадобилось

Answer 1

я исправил программу. Полный исходник ты можешь найти в конце ответа Во первых пише чише, более красиво( https://habr.com/ru/post/112042/ ) Что я исправил?

1)Проверку на ноль

 do
 {
 result = game.getInput("Введите число");
 }
 while(result == null || result.isEmpty());

2)Программа не обрабала цифры больше 7.

do
{
inputLine = is.readLine();

if(inputLine.length() == 0) return null;
if(Integer.parseInt(inputLine)>=7)
{
    System.out.println("Привет, я программа. Нужно ввести меньше цыфры семь, \nпотому что цыфры больше 7 я не умею обрабатывать,\n так как в меня не добавили такой функционал\n ");    
    System.out.println("Введите число: ");
}

}
while(Integer.parseInt(inputLine)>=7);

3) Добавить проверку на ввод, что ввели именно цифры,а не строку.

4) Формулируй более четко вопрос, что именно неправильно выполняется в коде.

Добавляю как html код, т.к. не могу добавить как Java code Исправленый код:

import java.io.BufferedReader; 
import java.io.IOException; 
import java.io.InputStreamReader; 
import java.util.regex.Matcher; 
import java.util.regex.Pattern; 
 
public class Main { 
 
	int[] location; 
	int win = 0; 
 
	void setLocation(int[] myArray) { 
		this.location = myArray; 
	} 
 
	String getInput(String promt) throws java.io.IOException { 
		String inputLine = null; 
 
		boolean input_right = true; 
		BufferedReader is = new BufferedReader(new InputStreamReader(System.in)); 
 
		do { 
			System.out.print(promt + " "); 
			inputLine = is.readLine(); 
			input_right = check_input_for_match_of_format_if_all_okey_return_false(inputLine); 
		} while (input_right); 
 
		return inputLine; 
	} 
 
	private boolean check_input_for_match_of_format_if_all_okey_return_false(String inputLine) { 
 
		if (inputLine.replaceAll(" ", "").length() == 0) { 
			System.out.println("You can't input empty space"); 
			return true; 
		} 
 
		// check for letters 
		Pattern pattern = Pattern.compile(".*[a-zA-Z]+.*"); 
		Matcher matcher = pattern.matcher(inputLine); 
 
		if (matcher.matches()) { 
			System.out.println("You can't input letters"); 
			return true; 
		} 
		// ... 
 
		if (Integer.parseInt(inputLine) >= 7) { 
			System.out.println("You can't input numbers more than 6"); 
			return true; 
		} 
 
		return false; 
	} 
 
	String check(String guess) { 
 
		String result = "Мимо"; 
		int number = Integer.parseInt(guess); 
 
		if (location[number] == 1) { 
			result = "Попал"; 
			win++; 
			location[number] -= 1; 
		} 
 
		if (win == 3) { 
			result = "Потопил"; 
		} 
 
		return result; 
	} 
 
	public static void main(String[] args) throws java.io.IOException { 
		Main main = new Main(); 
		main.start(); 
	} 
 
	public void start() throws IOException { 
		// initialize variables 
		int numOfGuesses = 0; 
		String result; 
		int[] arr = generate_new_array(); 
		// ... 
 
		Main game = new Main(); 
		game.setLocation(arr); 
 
		while (true) { 
			result = game.getInput("Введите число"); 
			result = game.check(result); 
			numOfGuesses++; 
 
			if (result.equals("Потопил")) { 
				System.out.println("Вам потребовалось " + numOfGuesses + "попыток(и)"); 
				break; 
			} 
		} 
	}// end method 
 
	private int[] generate_new_array() { 
 
		int[] arr = new int[7]; 
		int rand = (int) (Math.random() * 5); 
 
		for (int s = 0; s < 3; s++) { 
			arr[rand + s] = 1; 
		} 
 
		return arr; 
	} 
 
}

READ ALSO
Как правильно написать условие для сравнения строки класса StringBuilder с её реверсом и поместить это в цикл?

Как правильно написать условие для сравнения строки класса StringBuilder с её реверсом и поместить это в цикл?

Суть задачи: дана строкаИз неё нужно сделать палиндром (когда слово читается одинаково и с начала и с конца) минимально возможной длины

214
Как работает &lt;? extends SomeClass&gt; в Map&lt;K,V&gt;?

Как работает <? extends SomeClass> в Map<K,V>?

Есть два класса EJPlayer (Интерфейс) и EPlayer (Дочерний)

104
Программа не работает. В чем ошибка? [закрыт]

Программа не работает. В чем ошибка? [закрыт]

Хотите улучшить этот вопрос? Обновите вопрос так, чтобы он вписывался в тематику Stack Overflow на русском

177