Правильная реализация работы цикла и массива java
Помогите заменить в main, в цикле for выражение "i < 28" на что-то вроде "i < hashMapRes.size()".
import java.util.ArrayList;
import java.util.HashMap;
public class Test {
static ArrayList<String> values = new ArrayList<>();
public static void main(String[] args){
for (int i = 0; i < 28; i++){
System.out.println((i + 1) + ") " + hashMapRes(i));
}
}
static String hashMapRes(int i) {
HashMap<String, String> hash_sources = new HashMap<>();
hash_sources.put("Google", "https://news.google.com/rss?hl=ru&gl=RU&ceid=RU:ru");
hash_sources.put("Яндекс", "https://news.yandex.ru/index.rss");
hash_sources.put("Mail.ru", "https://news.mail.ru/rss/90/");
hash_sources.put("Lenta", "https://lenta.ru/rss");
hash_sources.put("Известия", "https://iz.ru/xml/rss/all.xml");
hash_sources.put("Вести", "https://www.vesti.ru/vesti.rss");
hash_sources.put("Гарант", "http://rss.garant.ru/news/");
hash_sources.put("Life", "https://life.ru/xml/feed.xml?hashtag=%D0%BD%D0%BE%D0%B2%D0%BE%D1%81%D1%82%D0%B8");
hash_sources.put("РБК", "http://static.feed.rbc.ru/rbc/logical/footer/news.rss");
hash_sources.put("Газета.ру", "https://www.gazeta.ru/export/rss/first.xml");
hash_sources.put("Ведомости_1", "https://www.vedomosti.ru/rss/news");
hash_sources.put("Ведомости_2", "https://www.vedomosti.ru/rss/articles");
hash_sources.put("BBC", "http://feeds.bbci.co.uk/russian/rss.xml");
hash_sources.put("Поплулярная механика", "https://www.popmech.ru/out/public-all.xml");
hash_sources.put("Наука и жизнь", "https://www.nkj.ru/rss/");
hash_sources.put("RT", "https://russian.rt.com/rss");
hash_sources.put("C-News", "https://cnews.ru/inc/rss/news.xml");
hash_sources.put("Правительство РФ", "http://government.ru/all/rss/");
hash_sources.put("Госдума РФ", "http://duma.gov.ru/news/feed/");
hash_sources.put("Российская газета_1", "https://rg.ru/tema/ekonomika/rss.xml");
hash_sources.put("Российская газета_2", "https://rg.ru/tema/obshestvo/rss.xml");
hash_sources.put("Ростех", "https://rostec.ru/rss_yandex/");
hash_sources.put("Коммерсант_1", "https://www.kommersant.ru/RSS/section-business.xml");
hash_sources.put("Коммерсант_2", "https://www.kommersant.ru/RSS/section-accidents.xml");
hash_sources.put("Эксперт", "https://expert.ru/doc-list/rss/");
hash_sources.put("Nasa", "https://www.nasa.gov/rss/dyn/breaking_news.rss");
hash_sources.put("Яндекс.Космос", "https://news.yandex.ru/cosmos.rss");
hash_sources.put("Astronews", "https://astronews.space/?format=feed&type=rss");
values = new ArrayList<>(hash_sources.values());
return values.get(i);
}
}
Ответы (1 шт):
У вас функция возвращает строку, и соответственно она не подойдет для цикла. Я могу предложить сделать глобальную переменную по примеру source которая будет соответствовать созданному массиву. И ваш цикл будет проходить по данной переменной. Например:
ArrayList<String> values = new ArrayList<>()
и в функции делаем так:
values = new ArrayList<>(hash_sources.values());
и дальше ваш цикл будет работать так:
for (int i = 0; i < values.size; i++){
System.out.println(hashMapRes(i));
}
и я бы убрал глобальную переменную source если она вам нигде не нужна кроме как в функции. Пусть функция возвращает что-то типа такого:
return values.get(i);
так будет проще я думаю :)
UPDATE
Я кажется понял в чем у вас проблема. Вы вызываете цикл и просите его пройтись по массиву в тот момент когда он еще пустой. Я думаю что нужно сделать функцию, которая будет добавлять записи в массив, либо делать это сразу в функции main. Если же все-таки вы хотите вынести максимум за пределы функции main то делайте отдельно функцию которая будет добавлять в массив элементы, и дальше перед запуском цикла проверяйте размер массива. Если например сейчас вы сделаете так:
if(values.isEmpty){
for (int i = 0; i < values.size; i++){
System.out.println(hashMapRes(i));
}
}else{
System.out.println("array is empty);
}
то по логике выведется сообщение в консоль. Поэтому вам нужно сначала делать добавление в массив а потом уже у него (массива) запрашивать элемент. Я думаю нужно делать так:
public static void main(String[] args){
addToArr()
for (int i = 0; i < 28; i++){
System.out.println((i + 1) + ") " + hashMapRes(i));
}
}
дальше функция добавления в массив:
addToArr(){
values.add("your_site")
}
дальше делаем такую конструкцию:
if(!values.isEmpty){
for (int i = 0; i < values.size; i++){
System.out.println(values[i]);
}
}else{
System.out.println("array is empty);
}
ну либо можно сделать функцию которая возвращает элемент массива:
public String getElement(String[] array, int index) {
return array[index];
}
и дальше уже в цикле будет так:
if(values.isEmpty){
for (int i = 0; i < values.size; i++){
System.out.println(getElement(values,i));
}
}else{
System.out.println("array is empty);
}