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