Java 数字之战

Java 数字之战,java,Java,大家好,我是Java新手,我有一个示例问题。我也有自己的解决办法。有没有其他更好的办法来解决这个问题 在遥远的王国里,发生了数战。该王国的国王要求你制定一个计划,确定该赛事的获胜者/冠军。参赛者人数未定。比赛的获胜者通常是人数最多的。这场比赛是一场淘汰赛。比赛的顺序是先进先出,后进先出,等等。。。如果某个号码没有对手,他或她将被视为默认赢家 样本输出: 输入参赛者人数:5 参赛者1:50入场 参赛者2:30入场 参赛者3:8入场 参赛者4:11入场 参赛者5:20入场 模拟: 第一轮:50比20

大家好,我是Java新手,我有一个示例问题。我也有自己的解决办法。有没有其他更好的办法来解决这个问题

在遥远的王国里,发生了数战。该王国的国王要求你制定一个计划,确定该赛事的获胜者/冠军。参赛者人数未定。比赛的获胜者通常是人数最多的。这场比赛是一场淘汰赛。比赛的顺序是先进先出,后进先出,等等。。。如果某个号码没有对手,他或她将被视为默认赢家

样本输出:

输入参赛者人数:5

参赛者1:50入场

参赛者2:30入场

参赛者3:8入场

参赛者4:11入场

参赛者5:20入场

模拟:

第一轮:50比20胜出者是:50

第二轮:30比11胜出者是:30

第三轮:默认赢家是:8

接下来

第四轮:50比8胜出者是:50

第五轮:默认获胜者为30人

接下来

第六轮:50比30胜出者是:50

冠军:50

总括号匹配数:3

总轮数:6轮

我的解决方案:

import java.util.Scanner;

public class BattleofNumbers{
public static void main(String[] args){
    double num1, num2, num3, num4, num5;
    double chal1, chal2, chal3, champion;
    double bracket, round = 0;

    System.out.println("Please Enter 5 Numbers: ");
    System.out.println("");

    Scanner in = new Scanner(System.in);
    num1 = in.nextDouble();
    num2 = in.nextDouble();
    num3 = in.nextDouble();
    num4 = in.nextDouble();
    num5 = in.nextDouble();

    System.out.println("");

    if (num1 > num5){
        chal1 = num1;
        round++;
        System.out.println("Round 1 Winner: " + chal1);
        }
    else{
        chal1 = num5;
        round++;
        System.out.println("Round 1 Winner: " + chal1);
    }
    if (num2>num4){
        chal2 = num2;
        round++;
        System.out.println("Round 2 Winner: " + chal2);
    }else{
        chal2 = num4;
        round++;
        System.out.println("Round 2 Winner: " + chal2);
    }
    if (chal1>num3){
        chal3 = chal1;
        round++;
        System.out.println("Round 3 Winner: " + chal3);
    }else{
        chal3 = num3;
        round++;
        System.out.println("Round 3 Winner: " +chal3);
    }
    if (chal3 > chal2){
        champion = chal3;
        round++;
        System.out.println("Round 4 Winner: " + champion);
    }else{
        champion = chal2;
        round++;
        System.out.println("Round 4 Winner: " + champion);
    }
    bracket = round / 2;
    System.out.println("=====================");

    System.out.println("The Champion: " + champion);
    System.out.println("No. of Rounds: " + round );
    System.out.println("No. of Brackets: " + bracket);
    }
}
  • 我不知道你有多经验,但你应该使用数组而不是5个单变量:
    double[]nums=newdouble[5]。另外,不需要变量“方括号”,因为它总是四舍五入/2,所以可以替换它:
    System.out.println(“方括号数:+round/2”)

  • 因为每个if-else块的第2行和第3行都在if-else块和else块中使用,所以您应该将它们外包(从而减少代码量):

  • “轮”似乎是恒定的4。您可以停止计算它,只需声明它为4:
    double round=4


此解决方案向您展示了如何使用ArrayList实现这些功能(以及在实际代码中不太可能使用ArrayList):

import java.util.ArrayList;
导入java.util.Scanner;
公共类程序{
公共静态void main(字符串[]args){
ArrayList nums=新的ArrayList();
扫描仪输入=新扫描仪(系统输入);
System.out.println(“有多少参赛者?”);
int size=in.nextInt();
而(大小-->0){
System.out.println(“参赛者:”);
nums.add(in.nextDouble());
}
而(nums.size()>1){
System.out.println(“回合开始,参赛者为:“+nums”);
int i=0;
而(i
我尝试了一个使用数组的小实现,我称之为半递归。我确信它并不完美,但它是一种更通用的方法,因为输入数字的数量是动态的,并且条件检查只编程一次。请随意对此给出反馈,也许有人有递归执行每个检查的想法

import java.util.Scanner;

public class BattleofNumbers {

  double[] nums;
  int amount, round = 0;

  double champ;

  Scanner in;

  public BattleofNumbers() {
      in = new Scanner(System.in);
      initValues();
      processGame();
  }

  public void processGame() {
      champ = calcChamp(nums);
      System.out.println("=====================");
      System.out.println("The Champion: " + champ);
      System.out.println("No. of Rounds: " + round);
      System.out.println("No. of Brackets: "
            + (int) Math.ceil((double) round / 2));
  }

  private void initValues() {
      System.out.println("Please enter amount of numbers:");
      amount = in.nextInt();

      nums = new double[amount];

      for (int i = 0; i < amount; i++) {
          System.out.println("Please enter " + (i + 1) + ". number:");
          nums[i] = in.nextDouble();
      }

      System.out.println("");
  }

  public double calcChamp(double[] nums) {
      double[] nexts = new double[(int)Math.ceil(((double) nums.length / 2))];

      for (int first = 0, second = (nums.length - 1); first <= second; first++, second--) {
          if (nums[first] > nums[second]) {
              nexts[first] = nums[first];
          } else {
              nexts[first] = nums[second];
          }
          round++;
          System.out
                .println("Winner of round " + round + ": " + nexts[first]);
      } 

      if (nexts.length == 1) {
          return nexts[0];
      } else {
          return calcChamp(nexts);
      }
  }

  public static void main(String[] args) {
      new BattleofNumbers();
  }
import java.util.Scanner;
公共级数字战{
双[]nums;
整数金额,四舍五入=0;
双冠军;
扫描仪输入;
公共电话号码(){
in=新扫描仪(System.in);
initValues();
processGame();
}
公共游戏(){
champ=calcChamp(nums);
System.out.println(“==================================”);
System.out.println(“冠军:+champ”);
系统输出打印项次(“轮数:+轮);
System.out.println(“括号编号:”
+(int)数学单元((双)轮/2);
}
私有void initValues(){
System.out.println(“请输入数字的数量:”);
金额=in.nextInt();
nums=新的双倍[金额];
对于(int i=0;i

}

您有什么具体的问题吗?我有没有办法让我的代码更简短易读?请看一看,因为您有工作代码,这是获得编码实践帮助的最佳地方。您学习了吗?也会有帮助。我刚刚意识到,我可以从XML或数据库获取输入,但我需要文档来从命令行获取输入。哦,是的,我的解决方案并没有提供您想要的所有输出,但这正是您应该了解的方法。
import java.util.ArrayList;
import java.util.Scanner;

public class Prog{
    public static void main(String[] args){
      ArrayList<Double> nums = new ArrayList<Double>();
      Scanner in = new Scanner(System.in);
      System.out.println("How many contestants are there? ");
      int size = in.nextInt();
      while(size-- > 0){
        System.out.println("Contestant: ");
        nums.add(in.nextDouble());
      }
      while(nums.size() > 1){
        System.out.println("ROUND STARTED, contestants are: " + nums);
        int i = 0;

        while(i < nums.size()){
          nums.set(i, Math.max(nums.get(i), nums.get(nums.size()-1)));
          if(i != nums.size() - 1)
            nums.remove(nums.size() -1);
          i++;
        }
      }
      System.out.println("Competition has ended, the winner is: " + nums.get(0));
    }
}
import java.util.Scanner;

public class BattleofNumbers {

  double[] nums;
  int amount, round = 0;

  double champ;

  Scanner in;

  public BattleofNumbers() {
      in = new Scanner(System.in);
      initValues();
      processGame();
  }

  public void processGame() {
      champ = calcChamp(nums);
      System.out.println("=====================");
      System.out.println("The Champion: " + champ);
      System.out.println("No. of Rounds: " + round);
      System.out.println("No. of Brackets: "
            + (int) Math.ceil((double) round / 2));
  }

  private void initValues() {
      System.out.println("Please enter amount of numbers:");
      amount = in.nextInt();

      nums = new double[amount];

      for (int i = 0; i < amount; i++) {
          System.out.println("Please enter " + (i + 1) + ". number:");
          nums[i] = in.nextDouble();
      }

      System.out.println("");
  }

  public double calcChamp(double[] nums) {
      double[] nexts = new double[(int)Math.ceil(((double) nums.length / 2))];

      for (int first = 0, second = (nums.length - 1); first <= second; first++, second--) {
          if (nums[first] > nums[second]) {
              nexts[first] = nums[first];
          } else {
              nexts[first] = nums[second];
          }
          round++;
          System.out
                .println("Winner of round " + round + ": " + nexts[first]);
      } 

      if (nexts.length == 1) {
          return nexts[0];
      } else {
          return calcChamp(nexts);
      }
  }

  public static void main(String[] args) {
      new BattleofNumbers();
  }