【问题标题】:Storing double up value in an Array using for loop?使用for循环在数组中存储双倍值?
【发布时间】:2016-02-25 05:19:36
【问题描述】:

/*IMO 我已经完成了大部分项目,但我无法将注意力集中在数组的部分上。我应该给它分配值,然后让它显示在屏幕上,就像现在程序运行时所做的那样,但它没有通过数组。请帮助它让我发疯。

作业:

对于这个项目,您将创建一个程序,要求用户输入一个小于 20 的正整数值。请注意,该程序只会从用户那里收集一个数字。所有其他数字将由程序生成。

如果用户输入大于 20 的数字,用户应该会收到错误消息。

如果用户输入一个等于或小于 20 的数字,则显示从 1 到所选数字的每个值的双精度数(每个数字乘以 2),然后提供所有双精度数的总和。

例如,如果用户输入数字 5,则应显示以下内容:

Double up 1 = 2

Double up 2 = 4

Double up 3 = 6

Double up 4 = 8

Double up 5 = 10

Total = 30

最低要求: • 创建一个包含以下方法的单独类。注意:这个类应该与包含 main 方法的公共类分开。 1. 一种将接受两个参数的方法:一个整数数组和一个整数变量。 1. 整数变量应保存用户提供的值。该数组将用于保存加倍结果。 2. 该方法应该执行计算,并将加倍结果存储在数组中。此外,应使用也是私有实例变量的累加器变量来计算所有加倍值的总和。 3.您必须确保调用方法获得对数组的更改。请记住,默认情况下,数组是通过引用传递的。此方法必须使用循环。

  1. 一个单独的方法将返回(不显示)存储在名为 total 的私有实例变量中的值。

• 创建一个 main 方法,该方法创建一个数组和整数变量,以及您的类的一个实例。然后主方法应该使用实例调用类的每个方法,传递所需的数据并处理任何返回数据。显示数组和总变量的全部内容。 */

import java.util.Scanner;
public class project2 {

public static void main(String args[]){

    scores output = new scores();
    output.enterNum();
    output.displayScores();

}

}
class scores
{
    int total;
    int stats[] = new int[20];
    int num1;
    void enterNum()
    {

        Scanner input = new Scanner(System.in);
        System.out.println("Enter a number between 1 and 20: ");
        num1 = input.nextInt();

        if(num1<=0 || num1>20)
        {
            System.out.println("You entered a wrong number. Try again.");
            System.out.println("");
            enterNum();
        }   


    }
    void displayScores()
    {
        int b=0;
        int val2=0;
        int total = 0;


        val2=num1*2;


        for(int i=1;b<val2;i++)
        {


            System.out.println(b=i*2);  
            total = total + b;

        // this part.   
        //  stats[i] = b;
        //  System.out.println(stats);
        }

        System.out.println(total);

    }   

}

【问题讨论】:

  • 究竟是什么问题?
  • 你的代码很混乱。问题似乎出在 displayScores 方法中。 for循环的参数没有意义。变量 b 和 vak2 应该代表什么?
  • 很抱歉,如果它令人困惑。 val2=num1*2;由于它应该加倍,我分配了 num1(用户输入的内容)* 2(加倍),并将其分配给 val2。我现在看到我本可以做到这一点 num1=num1*2; ?所以无论如何,如果你运行它要求一个数字的程序,假设你输入 5 * 2 = 10。它从 2、4、6、8、10 开始并停止。 b...我想我不需要它? i=i*2 会做同样的事情吗?
  • 从我的阅读方式来看,您的主要方法应该是从用户那里获取号码以及进行所有打印。另一个类应该只在操作完成后返回数据,但是所有的打印都是由另一个类完成的。另请注意,您不需要大小为 20 的数组,而是使其与用户输入的数字大小相同(如果它在可接受的范围内)
  • @BahramdunAdil 清楚您的编辑 cmets。

标签: java arrays loops for-loop


【解决方案1】:

Maljam 是对的,你的 for 循环就是这里的问题。

您的 for 循环正在处理一些不需要存在的 int b。您想要的是在循环的每次迭代中将 i*2 添加到总计中。此外,您需要修改您的 for 循环标头以检查 i 而不是 b。我不太确定你想用数组做什么。这个项目根本不需要。

试着把它改成这样:

for (int i=1; i<=val1; i++){
    //stats[i] = i;
    System.out.println("Double up " + i + " = " + 2*i);
    total = total + 2*i; //or total += 2*i;
}
System.out.println("Total: " + total);

【讨论】:

  • 嗯,我的教授希望我们使用一个(它在我上面发布的文本中说)。 ;(。这是这里的主要问题。所以当我添加这两行时 stats[i] = i; System.out.println(stats); 我得到类似这样的 [I@33909752
  • 您的打印声明应为System.out.println(stats[i]);
【解决方案2】:
public class scores {

int total;
int stats[];
int num1;

void enterNum() {

    Scanner input = new Scanner(System.in);
    System.out.println("Enter a number between 1 and 20: ");
    num1 = input.nextInt();

    if (num1 <= 0 || num1 > 20) {
        System.out.println("You entered a wrong number. Try again.");
        System.out.println("");
        enterNum();
    }

}

void displayScores() {
    stats = new int[num1];
    int total = 0;

    for (int i = 0; i < num1; i++) {
        stats[i] = (i+1) * 2;
        total += stats[i];
    }

    for (int i = 0; i < num1; i++) {
        System.out.println((i+1) + " * 2 = " + stats[i]);
    }

    System.out.println("Total: " + total);

}
}

【讨论】:

  • 这 2 个 for 循环可以很容易地组合成 1 个
  • 当然可以,但我把它们放在了登录和输出之间的澄清和分离。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-12-07
  • 2015-08-25
  • 2021-05-27
  • 2012-08-20
  • 1970-01-01
相关资源
最近更新 更多