Próbuję napisać swoją pierwszą aplikację. Ma ona polegać na wybraniu odpowiedniej flagi do nazwy państwa która wyświetli się na ekranie (jeszcze tej funkcji nie napisałem). Problem polega na tym, że wylosowane liczby odpowiadające konkretnym flagom zawsze wskazują 2 miejsca spośród 4. Nie wiem jak doprowadzić do tego, żeby losowała się odpowiednia liczba z podanego zakresu.
package com.example.flagi;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.Toast;
import androidx.appcompat.app.AppCompatActivity;
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Random;
import java.util.Set;
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
//zmienne
int images[] = new int[195];
int j = 0;
int correctFlag = 0;
Random random = new Random();
Set<Integer> set = new LinkedHashSet<>();
List<String> names = new ArrayList<>();
List<Integer> list = new ArrayList<>();
@Override
public void onClick(View v) {
ImageView imageView = findViewById(R.id.image1);
ImageView imageView2 = findViewById(R.id.image2);
ImageView imageView3 = findViewById(R.id.image3);
ImageView imageView4 = findViewById(R.id.image4);
correctFlag = random.nextInt((j+4)-(j+2))+(j+2);
if (v.getId() == R.id.btn1) {
System.out.println("Random numbers with no duplicates = " + list);
System.out.println("Random number = " + set);
//wyswietlanie oraz zakonczenie wyswietlania
if(j == 192){
Toast.makeText(this, "To koniec", Toast.LENGTH_SHORT).show();
findViewById(R.id.btn1).setEnabled(false);
}else {
imageView.setImageResource(images[list.get(j)]);
imageView2.setImageResource(images[list.get(j + 1)]);
imageView3.setImageResource(images[list.get(j + 2)]);
imageView4.setImageResource(images[list.get(j + 3)]);
j += 4;
}
System.out.println("Poprawna flaga"+correctFlag);
}
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button btn1 = findViewById(R.id.btn1);
btn1.setOnClickListener(this);
//pobranie resourceId obrazów png
for (int i = 1; i <= 195; i++) {
int resId = getResources().getIdentifier("a" + i, "drawable", getPackageName());
images[i-1] = resId;
}
//Pobranie nazw z pliku do listy names
try (BufferedReader br = new BufferedReader(new FileReader("names.txt"))) {
String line;
while ((line = br.readLine()) != null) {
names.add(line);
}
} catch (IOException e) {
e.printStackTrace();
}
for (String name : names) {
System.out.println(name);
}
//Losowanie kolejnosci flag
while (set.size() < 194) {
set.add(random.nextInt(194)+1);
}
correctFlag = random.nextInt((j+4)-(j+2))+(j+2);
System.out.println("Poprawna flaga"+correctFlag);
list.addAll(set);
}
public void number1(View view) {
if (j == correctFlag){
Toast.makeText(this, "Brawo! Zgadles", Toast.LENGTH_SHORT).show();
}else{
Toast.makeText(this, "Sprobuj jeszcze raz", Toast.LENGTH_SHORT).show();
}
}
public void number2(View view) {
if (j-1 == correctFlag){
Toast.makeText(this, "Brawo! Zgadles", Toast.LENGTH_SHORT).show();
}else{
Toast.makeText(this, "Sprobuj jeszcze raz", Toast.LENGTH_SHORT).show();
}
}
public void number3(View view) {
if (j-2 == correctFlag){
Toast.makeText(this, "Brawo! Zgadles", Toast.LENGTH_SHORT).show();
}else{
Toast.makeText(this, "Sprobuj jeszcze raz", Toast.LENGTH_SHORT).show();
}
}
public void number4(View view) {
if (j-3 == correctFlag){
Toast.makeText(this, "Brawo! Zgadles", Toast.LENGTH_SHORT).show();
}else{
Toast.makeText(this, "Sprobuj jeszcze raz", Toast.LENGTH_SHORT).show();
}
}
}