#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);