Как мне написать программу для поиска 0 и 1 в Java?

#java #arrays

Вопрос:

Я хочу, чтобы он взял 10 значений с клавиатуры и выяснил, содержит ли какой-либо из 10 входов 0 или 1, и если да, то какая позиция в массиве?

 example

 Input = 9 15 91 1 0 22 31 67 88 33

output = 4 found number 1, at position 2 3 4 7
         1 found number 0, at position 5
         5 found others, at position 1 6 8 9 10
 

Я не могу писать дальше, потому что все еще не понимаю. Посоветуйте мне, пожалуйста
Я пытался написать это, но результат все еще неверен.

 public static int SequentialSearch(int number[], int key_1, int key_0) {
    int looker;

    for (looker = 0; looker < number.length; looker  ) {
        if (number[looker] == key_1)
            return looker;
        if (number[looker] == key_0)
            return looker;
    }
    return -1;
}

public static void Loopcheck(int number[]) {
    int key_1, key_0, others_key;

    for (int count_check = 0; count_check < number.length; count_check  ) {
        if (number[count_check] / 10 == 1 || number[count_check] % 10 == 1) {
            key_1 = 1;
            break;
        } else if (number[count_check] / 10 == 0 || number[count_check] % 10 == 0) {
            key_0 = 0;
            break;
        }

    }

}

public static int Print(int number[], int location) {
    for (int loop = 0; loop < number.length; loop  )
        if (location > -1)
            System.out.print(" 0 : "   location);
    return 0;
}

public static void main(String[] args) {
    Scanner Sc = new Scanner(System.in);
    int value1, value0, location, key1;
    int[] number = new int[10];
    for (int count = 0; count < number.length; count  ) {
        number[count] = Sc.nextInt();
    }
    int item1 = 1;
    int item0 = 0;
    location = SequentialSearch(number, item1, item0);
    Loopcheck(number);
    Print(number, item1);
}
 

}

Комментарии:

1. Если вы хотите найти 1 или 0, не лучше ли было бы рассматривать входные данные как массив строк? Вам нужно улучшить свой вопрос, объяснив, что не так с вашим кодом или с какой проблемой вы столкнулись.

2. Мне жаль, что я не знаю, как использовать строки. Поэтому я пытаюсь понять, что я могу сделать. Я пытался задать этот вопрос раньше, но он был удален.

Ответ №1:

вы можете использовать такой метод, как этот,

 public void haszero(int numbers[])
{
      int position;
      for(position = 0; position < numbers.size; position  )
      {
          while(numbers[position] > 0)
          {
              if(numbers[position] % 10 == 0)
              system.out.print("0 at " position)

              number=number/10;
           }
      }
      
}
 

и затем вы можете использовать тот же метод, что и для 1.
или вы также можете сделать что-то подобное

 for(int position = 0; position < array.size; position  )
{
     if (String.valueOf(array[position]).contains("0"))
     system.out.print("0 at " position);
}
 

Комментарии:

1. Спасибо, я постараюсь его использовать.

Ответ №2:

Поскольку вы ищете конкретный символ, я бы рекомендовал вместо этого работать с массивом строк или символов. Какой-нибудь код, который вы можете рассмотреть, вероятно, даст вам представление о том, как решить проблему:

 //part 1
            Scanner sc= new Scanner(System.in);    //System.in is a standard input stream
            System.out.print("Enter first number- ");
            int a= sc.nextInt();
            System.out.print("Enter second number- ");
            int b= sc.nextInt();
            System.out.print("Enter third number- ");
            int c= sc.nextInt();
// part 2
                String Input = String.join(" ",Integer.toString(a),Integer.toString(b),Integer.toString(c));
                System.out.println(Input);
// part 3
            int i = 0;

            while(i<Input.length()){
            if(Input.charAt(i)=='0') System.out.println(String.join(" ","0 at position",Integer.toString(i 1)));
            if(Input.charAt(i)=='1') System.out.println(String.join(" ","1 at position",Integer.toString(i 1)));
            i  ;
            }
 

Комментарии:

1. Спасибо. Я не очень хорошо разбираюсь в струнах. Не могли бы вы объяснить мне код, пожалуйста?

2. Часть первая взята из: javatpoint.com/how-to-get-input-from-user-in-java . В части 2 я создал одну строку, используя строку. функция соединения. В части 3 я использовал цикл while, чтобы проверить, является ли конкретный символ строки «Ввода» 0 или 1, и вывести их положение. Скопируйте код и попробуйте сами, измените что-нибудь и посмотрите, что это меняет, постарайтесь понять, и тогда это должно быть просто, чтобы вы могли создать решение для вашей проблемы.

Ответ №3:

Самый действенный совет, который я бы дал, — это:

храните свой ввод как string или char[] вместо int[] .

Для решения: Создайте коллекцию(например, список или массив), в которой будут храниться ваши действительные индексы, и повторяйте ввод по одной букве за раз, добавляя действительные индексы в свою коллекцию, когда они удовлетворяют вашему условию. Реализуйте функцию » PrettyPrint ()», которая преобразует вашу коллекцию в приятный результат.

Комментарии:

1. Спасибо, я попробую написать еще раз.

Ответ №4:

Я пошел дальше и закодировал решение, в котором использовались массивы int. Вот результаты одного из моих более поздних тестов.

 Type 10 values: 0 1 2 3 4 5 6 7 8 9
1 found number 1, at position 2
1 found number 0, at position 1
8 found others, at position 3 4 5 6 7 8 9 10

Type 10 values: 12 23 34 45 127 21 84 0 73 364
3 found number 1, at position 1 5 6
1 found number 0, at position 8
6 found others, at position 2 3 4 7 9 10

Type 10 values: 
 

Чтобы выйти из программы, вы просто нажимаете клавишу Enter.

Мой процесс состоял в том, чтобы поддерживать три массива int. Один из них содержал индексы всех остальных. Один содержал индексы всех нулей. Один содержал индексы всех остальных значений.

Я написал этот код шаг за шагом, тестируя каждый шаг на этом пути. Я, вероятно, провел две или три дюжины тестов, каждый из которых проверял одну небольшую часть кода.

Первое, что я сделал, — это заставил входной цикл работать правильно. Я не проверял нечисловой ввод, но этот тест можно было легко добавить. Я также не ограничивал ввод 10 числами. Вы можете ввести 15 или 20 чисел, если хотите. Наконец, я не ограничил ввод двухзначными числами. Код, который ищет цифру, должен работать для любого положительного целого значения.

Затем я написал метод, позволяющий определить, содержит ли число определенную цифру. Метод работает с любой цифрой, а не только с нулем или единицей.

После этого оставалось только добиться того, чтобы вывод выглядел правильно.

Вот полный исполняемый код.

 import java.util.Scanner;

public class ZeroAndOne {

    public static void main(String[] args) {
        new ZeroAndOne().processInput();
    }
    
    public void processInput() {
        Scanner scanner = new Scanner(System.in);
        String line;
        
        do {
            System.out.print("Type 10 values: ");
            line = scanner.nextLine().trim();
            String[] parts = line.split("\s ");
            
            if (!line.isEmpty()) {
                int[] input = new int[parts.length];
                for (int index = 0; index < parts.length; index  ) {
                    input[index] = Integer.valueOf(parts[index]);
                }
                
                System.out.println(processArray(input));
            }
        } while (!line.isEmpty());
        
        scanner.close();
    }
    
    private String processArray(int[] input) {
        int[] zeros = new int[input.length];
        int[] ones = new int[input.length];
        int[] other = new int[input.length];
        
        int zeroIndex = 0;
        int oneIndex = 0;
        int otherIndex = 0;
        
        for (int index = 0; index < input.length; index  ) {
            boolean isOther = true;
            
            if (isDigit(input[index], 0)) {
                zeros[zeroIndex  ] = index;
                isOther = false;
            }
            
            if (isDigit(input[index], 1)) {
                ones[oneIndex  ] = index;
                isOther = false;
            }
            
            if (isOther) {
                other[otherIndex  ] = index;
            }
        }
        
        StringBuilder builder = new StringBuilder();
        builder.append(oneIndex);
        builder.append(" found number 1, at position ");
        builder.append(appendIndexes(ones, oneIndex));
        builder.append(System.lineSeparator());
        
        builder.append(zeroIndex);
        builder.append(" found number 0, at position ");
        builder.append(appendIndexes(zeros, zeroIndex));
        builder.append(System.lineSeparator());
        
        builder.append(otherIndex);
        builder.append(" found others, at position ");
        builder.append(appendIndexes(other, otherIndex));
        builder.append(System.lineSeparator());
        
        return builder.toString();
    }
    
    private boolean isDigit(int value, int digit) {
        if (value == 0 amp;amp; digit == 0) {
            return true;
        }
        
        while (value > 0) {
            int temp = value / 10;
            int remainder = value % 10;
            if (remainder == digit) {
                return true;
            }
            value = temp;
        }
        
        return false;
    }
    
    private StringBuilder appendIndexes(int[] array, int length) {
        StringBuilder builder = new StringBuilder();
        for (int index = 0; index < length; index  ) {
            builder.append(array[index]   1);
            if (index < (length - 1)) {
                builder.append(" ");
            }
        }
        
        return builder;
    }

}
 

Комментарии:

1. О, спасибо, ты мне очень помог

Ответ №5:

Предполагая, что ваши входные данные представляют собой строку, содержащую целые числа, разделенные пробелом, вы можете прочитать их все, а затем зациклить String элементы с помощью:

 String input = Sc.readLine().split(" ");
int positions[] = new int[input.length];
int zeros = 0;
String zeroString = "";
int ones = 0;
String oneString = "";
int others = 0;
String otherString = "";
for (String item : input) {
    boolean isOther = true;
    String appendix = " "   item;
    if (item.indexOf("0") >= 0) {
        isOther = false;
        zeros  ;
        zeroString  = appendix;
    }
    if (item.indexOf("1") >= 0) {
        isOther = false;
        ones  ;
        oneString  = appendix;
    }
    if (isOther) {
        others  ;
        otherString  = appendix;
    }
}
System.out.println(ones   " found number 1, at position "   oneString);
System.out.println(zeros   " found number 0, at position "   zeroString);
System.out.println(others   " found others, at position "   otherString);