Witam, postanowiłem przepisać prosty program (quiz) z C++ na Java, jednak natknąłem się na problem którego na moim niskim poziomie nie mogę zrozumieć:
Problem prawdopodobnie wynika z źle przepisanej iteracji po linijkach pliku tekstowego .
działający quiz c++:
#include <iostream>
#include <fstream>
#include <cstdlib>
#include <algorithm>
#include <string>
using namespace std;
string temat, nick;
string tresc[5];
string odpA[5], odpB[5], odpC[5], odpD[5];
string poprawna[5];
string odpowiedz;
int punkty=0;
int main()
{
int nr_linii=1;
string linia;
fstream plik;
int nr_pytania=0;
plik.open("quiz.txt", ios::in); // wczytanie pliku o nazwie ....
if (plik.good()== false) //sprawdzanie czy plik istnieje by moc wczytac dane
{
cout<<"plik nie istnieje!";
exit(0); //zamknięcie programu
}
while(getline(plik, linia)){ //funkcja getline pobiera cala linie tzn tekst ze spacjami z pliku
switch (nr_linii) {
case 1:
temat= linia;
break;
case 2:
nick = linia;
break;
case 3:
tresc[nr_pytania]= linia;
break;
case 4:
odpA[nr_pytania]= linia;
break;
case 5:
odpB[nr_pytania]= linia;
break;
case 6:
odpC[nr_pytania]= linia;
break;
case 7:
odpD[nr_pytania]= linia;
break;
case 8:
poprawna[nr_pytania]= linia;
break;
}
if (nr_linii==8)
{
nr_linii=2;
nr_pytania++;
}
nr_linii++;
}
plik.close();
for (int i=0; i<=4; i++)
{
cout<<endl<<tresc[i]<<endl;
cout<<"A. "<<odpA[i]<<endl;
cout<<"B. "<<odpB[i]<<endl;
cout<<"C. "<<odpC[i]<<endl;
cout<<"D. "<<odpD[i]<<endl;
cout<<"Twoja odpowiedz: ";
cin>>odpowiedz;
transform(odpowiedz.begin(), odpowiedz.end(), odpowiedz.begin(), ::tolower ); // zmiana duzych liter na male gdy ktos uzywa capslocka
if (odpowiedz==poprawna[i])
{
cout<<"Dobrze zdobywasz punkt"<<endl;
punkty++;
} else cout<<"Zle !!! Brak punktu , poprawna odpowiedz to: " <<poprawna[i]<<endl;
}
cout <<"Koniec quizu, zdobyte punkty to: "<<punkty;
return 0;
}
java:
import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;
public class Main {
public static void main(String args []) throws FileNotFoundException {
int numerLini = 1;
int numerPytania = 0;
int punkty = 0;
String temat;
String nickGracza;
String odpowiedzGracza;
String [] trescPytania = new String[5];
String [] poprawnaOdpowiedz = new String[5];
String [] odpA = new String [5];
String [] odpB = new String [5];
String [] odpC = new String [5];
String [] odpD = new String [5];
File plikZPytaniami = new File("quiz.txt");
Scanner in = new Scanner (plikZPytaniami);
String linia = in.nextLine();
do {
switch (numerLini) {
case 1:
temat = linia;
break;
case 2:
nickGracza = linia;
break;
case 3:
trescPytania[numerPytania] = linia;
break;
case 4:
odpA[numerPytania] = linia;
break;
case 5:
odpB[numerPytania] = linia;
break;
case 6:
odpC[numerPytania] = linia;
break;
case 7:
odpD[numerPytania] = linia;
break;
case 8:
poprawnaOdpowiedz[numerPytania] = linia;
break;
}
if (numerLini == 8) {
numerLini = 2;
numerPytania++;
}
numerLini++;
} while ((linia != null));
for (int i=0; i<=4; i++) {
System.out.println(trescPytania[i]);
System.out.println("A. "+ odpA[i]);
System.out.println("B. "+ odpB[i]);
System.out.println("C. "+ odpC[i]);
System.out.println("D. "+ odpD[i]);
Scanner twojaOdpowiedz = new Scanner(System.in);
odpowiedzGracza= twojaOdpowiedz.nextLine();
System.out.println(odpowiedzGracza);
if (odpowiedzGracza== poprawnaOdpowiedz[i]) {
System.out.println("Dobrze Zodbywasz Punkt !");
punkty++;
} else {
System.out.println("Źle, poprawna odpowiedz to "+ poprawnaOdpowiedz[i] );
}
System.out.println("Kniec Quizu zdobyte punkty to :" + punkty);
}
}
}
``` java