Estou escrevendo um programa na minha classe java AP e estou muito confuso. O programa é suposto para ler um arquivo de dados usando outro programa chamado EasyReader. O programa consiste em uma classe de objeto que encontra o maior número, número médio, e menor número. A classe de teste é suposto para ler o arquivo de dados (numbers.bat) que proporciona um conjunto de números eo programa é suposto para imprimir o maior, médio e menor de todas as linhas do arquivo de dados. No entanto, ele está a ler apenas uma linha do arquivo de dados (o do meio) em vez de três. Ele está exibindo
Largest = 7.3 Medium = 5 Smallest = 3.2
Por favor ajude. Obrigado!
Aqui é a classe Object:
public class Numbers
{
double small;
double medium;
double large;
public Numbers(double A, double B, double C)
{
if(A>=B && A>=C)
{
large = A;
if(B>=C && B<=A)
{
medium = B;
small = C;
}
else
{
medium = C;
small = B;
}
}
else if(B>=A && B>=C)
{
large = B;
if(A>=C && A<=B)
{
medium = A;
small = C;
}
else
{
medium = C;
small = A;
}
}
else
{
large = C;
if(A>=B && A<=C)
{
medium = A;
small = B;
}
else
{
medium = B;
small = A;
}
}
}
public double large()
{
return large;
}
public double medium()
{
return medium;
}
public double small()
{
return small;
}
}
Aqui é a classe de teste:
public class NumbersTest
{
public static void main(String[] args)
{
EasyReader file = new EasyReader("numbers.dat");
double value1 = file.readDouble();
double value2 = file.readDouble();
double value3 = file.readDouble();
value1 = file.readDouble();
value2 = file.readDouble();
value3 = file.readDouble();
Numbers nums = new Numbers(value1, value2, value3);
System.out.println("Largest = " + nums.large() + " Medium = " + nums.medium() + " Smallest = " + nums.small());
}
}
E por último o arquivo de dados (numbers.bat)
4 9 2.5
3.2 5 7.3
12 8.2 9.1
A saída agora:
Largest = 7.3 Medium = 5.0 Smallest = 3.2
A saída esperada:
Largest = 12.0 Medium = 7.3 Smallest = 2.5
Seus números construtor só faz nada se o seu value1 (A) é maior ou igual a dos outros dois. Se não for ele vai deixar de pequeno, médio e grande porte em 0.
Edit: Expandindo a resposta aqui como parece mais limpo. Assim, no seu construtor de número
public Numbers(double A, double B, double C)
{
if(A>=B && A>=C)
{
large = A;
if(B>=C && B<=A)
{
medium = B;
small = C;
}
else
{
medium = C;
small = B;
}
}
}
Você só tem uma principal declaração se verificar se um é o maior, eo resto são aninhados dentro dele. Você também precisa de uma instrução if para se B ou C são o maior.
public Numbers(double A, double B, double C)
{
if(A>=B && A>=C)
{
large = A;
if(B>=C && B<=A)
{
medium = B;
small = C;
}
else
{
medium = C;
small = B;
}
} else if if(B>=A && B>=C)
{
//B is the largest, add code to determine medium and small as you did before
} else {
//C is the largest, add code to determine medium and small as you did before
}
}