#java #arrays #arraylist
#java #массивы #arraylist
Вопрос:
это моя первая «проблема»: создайте программу, позволяющую пользователю вводить целочисленное значение для поиска в списке3. Ваша программа должна отображать, найдено ли введенное целочисленное значение в list3, сколько их в list3 и каковы их местоположения в list3? «
Это почти сделано, единственная проблема в том, что я не мог следовать тому, что написано на выходе, приведенном в примере:
Список 1 : 1 3 2 5 7 8 5 6 9 4
Список 2 : 2 1 4 3 2 1 4 2 0 2
Список 3 : 3 4 6 8 9 9 9 8 9 6
Входное значение для поиска в списке3: 9
Значение 9 находится в Списке3!
В списке 3 их 4.
Находится по адресу: list3[4], list3 [5], list3[6], list3[8]
и это мой вывод:
список 1 : 1 3 2 5 7 8 5 6 9
4 список 2 : 2 1 4 3 2 1 4 2 0 2
список 3 : 3 4 6 8 9 9 9 8 9 6
Входное значение для поиска в списке3: 9
Значение 9 находится в Списке3!
В списке 3 их 4.
Находится по адресу: 4
как мне отобразить «находится по адресу: «, как в примере?
ОТРЕДАКТИРОВАНО Извините, я новичок здесь и в программировании. Это мой код:
import java.util.ArrayList;
import java.util.Scanner;
public class List2Sample
{
public static void main(String[] args)
{
int list1[] = new int[10];
int list2[] = new int[10];
int list3[] = new int[10];
String input = "";
int i, x, num = 0, count = 0;
boolean found = false;
ArrayList<Integer> arr = new ArrayList<Integer>(10);
Scanner in = new Scanner(System.in);
for(i = 0; i < 10; i )
{
list1[i] = 0;
}
for(i = 0; i < 10; i )
{
System.out.print("List 1 [" i "] : ");
try
{
list1[i] = in.nextInt();
}
catch(Exception e)
{
System.out.println("Error!");
}
}
for(i = 0; i < 10; i )
{
list2[i] = 0;
}
for(i = 0; i < 10; i )
{
System.out.print("List 2 [" i "] : ");
try
{
list2[i] = in.nextInt();
}
catch(Exception e)
{
System.out.println("Error!");
}
}
System.out.print("list1 : ");
for(i = 0; i < 10; i )
{
System.out.print(list1[i] "t");
}
System.out.println();
System.out.print("list2 : ");
for(i = 0; i < 10; i )
{
System.out.print(list2[i] "t");
}
System.out.println();
System.out.print("list3 : ");
for(i = 0; i < 10; i )
{
list3[0] = list1[0] list2[0]; list3[1] = list1[1] list2[1]; list3[2] = list1[2] list2[2];
list3[3] = list1[3] list2[3]; list3[4] = list1[4] list2[4]; list3[5] = list1[5] list2[5];
list3[6] = list1[6] list2[6]; list3[7] = list1[7] list2[7]; list3[8] = list1[8] list2[8];
list3[9] = list1[9] list2[9];
System.out.print(list3[i] "t");
}
System.out.println();
System.out.print("Input value to search in List3: ");
x = in.nextInt();
arr.add(list3[0]);
arr.add(list3[1]);
arr.add(list3[2]);
arr.add(list3[3]);
arr.add(list3[4]);
arr.add(list3[5]);
arr.add(list3[6]);
arr.add(list3[7]);
arr.add(list3[8]);
arr.add(list3[9]);
for (int n : list3)
{
if (n == x)
{
found = true;
break;
}
}
for (i = 0; i < 10; i )
{
if (list3[i] == x)
{
count ;
}
}
for (Integer value : arr)
{}
int pos = arr.indexOf(x);
if(found)
System.out.println("The value " x " is in List3!");
else
System.out.println("The value " x " is in List3!");
System.out.println("There are " count " of it in List 3.");
System.out.println("Located at: " pos);
}
}
Комментарии:
1. Пожалуйста, покажите свой код в вашем вопросе
2. @tgdavies привет, спасибо за напоминание. я отредактировал свой пост и включил свой код.
Ответ №1:
Предполагая, что list3 — это список целых чисел, затем используя потоки java8
String locations=IntStream.range(0,list3.size())
.filter(i->list3.get(i)==userInput)
.map(index->"list3[" index "]")
.collect(Collectors.joining(","));
Int occurences=locations.split(","). length;
if(occurences>0){System.out.println(userInput "occurred" occurences " Times " at locations " locations);}
else{System.out.println(userInput "Was not found");}
Комментарии:
1. я отредактировал свой пост и включил свой код. я использую как java6, должен ли он быть совместим с моим кодом?
2. java streams была введена начиная с 7. Боюсь, вам придется обновить
Ответ №2:
indexOf(ch)
будет возвращать только первое появление значения в массиве, если вы хотите, вы могли бы добавить второй параметр, чтобы указать Java, с чего начать поиск символа, например: indexOf(ch, fromIndex)
.
Однако в вашем случае гораздо проще просто использовать цикл на основе индекса для перебора всех элементов в массиве, а затем записать позиции, если вы нашли совпадающие символы, например:
for(int i = 0; i < arr.length; i ){ // loop through all indices of the array, starting from 0, end at arr.length - 1
if(arr[i] == ch){ // arr[i] is each character in the array at index i, ch is the target character you're matching against
System.out.println("Character found at position " i);
}
}