Как заставить эту программу принимать n количество тестовых примеров?

#java

#java

Вопрос:

Я практиковал динамическое кодирование, поэтому здесь я хочу принять n тестовых примеров, но когда я ввожу более одного числа тестовых примеров, он принимает только один тестовый пример. Допустим, я ввожу количество тестовых примеров как 2, а количество игроков и злодеев как 3 и ввожу их энергию, но она выполняется только для одной итерации, и программа заканчивается на следующей итерации. Как сделать так, чтобы она принимала много тестовых примеров?

 /* Read input from STDIN. Print your output to STDOUT*/

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Scanner;
class Testcase // Name should be in PASCAL
{
    int N;
    int [] play;
    int [] villain;
    String status;

    public Testcase (int n) { // Constructor
        this.N=n;
        play = new int [N];
        villain=new int [N];
    }

}
public class Main {
    static List<Testcase> caseno=new ArrayList<Testcase>();
    public static void main(String args[] ) throws Exception {
        List<Testcase> caseno=new ArrayList<Testcase>();
        Scanner sc=new Scanner(System.in);
        //int n1=10;
        System.out.println("Enter the number of Test Cases:");
        int n1=sc.nextInt();
        int i,j;
        Testcase t;
        for(i=0;i<n1;i  )
        {
            //int n=6;
            System.out.println("Enter the number of players and villains:");
            int n=sc.nextInt();
            t=new Testcase(n);

            System.out.println(t.N " " t.play.length);
            System.out.println("Enter the Player Energies");
            for(i=0;i<n;i  )
            {
                t.play[i]=sc.nextInt();
            }
            System.out.println("Enter the Villain Energies");
            for(i=0;i<n;i  )
            {
                t.villain[i]=sc.nextInt();
            }
            Arrays.sort(t.play);
            Arrays.sort(t.villain);
        }
        for(Testcase t1:caseno)
        {
            for(i=0;i<t1.N;i  )
            {
                System.out.println(t1.villain[i] " " t1.play[i]);
            }
            int flag=0;
            for(i=0;i<t1.N;i  )
            {
                if(t1.play[i]<t1.villain[i])
                {
                    flag=0;
                }
                else
                {
                    flag=1;
                    t1.status="LOSS";
                    break;
                }
            }
            if(flag==0)
            {
                t1.status="WON";
            }
            System.out.println(t1.status);

        }



        for (Testcase j1:caseno)
        {
            System.out.println(j1.status);

        }

        //Write code here

    }
}

 

Ответ №1:

Проблема в вашем случае заключается в видимости переменных. Я покажу вам проблему вкратце:

 int i;
for (i=0; i<2; i  ) {        // loop 1
   for (i=0; i<3; i  ) {     // loop 2
       // do something
   }
}
 

В цикле 2 переменная i будет выполняться от 0 до 2. После выхода из 2-го цикла переменная «i» содержит число 3 (вот почему она вышла). Таким образом, цикл 1 также завершится, потому что достигнуто конечное условие (i<2). Но это не то, что вы хотите.

Лучше превзойти такую проблему:

 for (int i1=0; i1<2; i1  ) {     // loop 1
   for (int i2=0; i2<3; i3  ) {  // loop 2
      // do something
   }
}
 

Таким образом, каждая переменная имеет свою собственную область видимости и не будет мешать другим переменным с тем же именем. Он будет выполняться через цикл 2 («i2» == 0, == 1 и == 2) теперь два раза (один для «i1» == 0 и один для «i1» == 1).

И это основная проблема в вашем примере.

Вы можете найти больше информации здесь: