【问题标题】:Java is setting Array sequence to 0 and not recognizing specific variablesJava 将数组序列设置为 0 并且无法识别特定变量
【发布时间】:2018-04-24 16:23:13
【问题描述】:

我正在上计算机编程课程,现在我们正在使用数组。我的目标是做到以下几点:

~ 提示用户他们今年写了多少数学测试。 ~ 询问用户他们在这些数学测试中的分数。 ~ 将每个分数放在一个数组中。 ~ 对数组进行排序,并从最低到最高给出他们的数学分数。 ~ 计算数学分数的平均值。

我的问题发生在它只保持分数为 0 并且后来无法识别 testGrade int 变量,因此它不会对它们进行平均。

这是我现在的完整代码:

public static void main(String... args) throws Exception
{
    for (int i = 0;i < testResults.length; i++)
    {
        System.out.print("Thank you, now please enter your grade on each test:     ");
        int testGrades = k.nextInt();
    }
    System.out.print("The original sequence is: \n   ");
    for (int i = 0;i < testResults.length; i++)
    {
        System.out.print(testResults [i] + ", ");
    }
    System.out.println();
    SortEm(testResults);
    System.out.print("The new sequence is : \n   ");
    for (int i=0; i < testResults.length; i++)
    {
        System.out.print (testResults[i] + ", ");
    }
    System.out.println();
    for (int i = 0;i < testResults.length; i++)
    {
        System.out.println("The average of all your tests is " + (testGrades / testNum));
    }
}
private static void SortEm (int [] ar)
{
    int temp;
    for (int i = ar.length - 1; i > 0; i--)
    {
        for (int j = 0; j < i; j++)
        {
            if (ar[j] > ar[j + 1])
            {
                temp = ar[j];
                ar[j] = ar[j + 1];
                ar[j+1] = temp;
            }
        }
    }
}

我非常感谢您对正在发生的事情以及如何解决它的一些见解。 提前谢谢大家:)

回答后我的错误: 发现 6 个错误: 文件:C:\Users\herhstudent\Desktop\gg.java [行:1] 错误:标记上的语法错误,删除这些标记 文件:C:\Users\herhstudent\Desktop\gg.java [行:3] 错误:标记“void”的语法错误,@预期 文件:C:\Users\herhstudent\Desktop\gg.java [行:3] 错误:令牌“...”的语法错误,。预期的 文件:C:\Users\herhstudent\Desktop\gg.java [行:3] 错误:令牌“抛出”的语法错误,预期接口 文件:C:\Users\herhstudent\Desktop\gg.java [行:6] 错误:令牌“;”上的语法错误,{ 应在此令牌之后 文件:C:\Users\herhstudent\Desktop\gg.java [行:44] 错误:语法错误,插入“}”完成InterfaceBody

【问题讨论】:

标签: java arrays


【解决方案1】:

这里有多个问题。首先是testGrades是在for循环中声明的:

for (int i = 0;i < testResults.length; i++)
{
    System.out.print("Thank you, now please enter your grade on each test:     ");
    int testGrades = k.nextInt();
}

这意味着有a narrower scope。以后不可用。您可以将它移到 for 循环之前声明,但这仍然没有任何意义。这个变量应该代表总分,我们应该逐步增加它,而不是每次都设置它。我还重命名了它,所以它在做什么更明显:

int totalScore = 0;
for (int i = 0;i < testResults.length; i++)
{
    System.out.print("Thank you, now please enter your grade on each test:     ");
    totalScore += k.nextInt();
}

现在我们需要解决您实际上从未向数组写入任何值的问题。这个循环现在变成:

for (int i = 0;i < testResults.length; i++)
{
    System.out.print("Thank you, now please enter your grade on each test:     ");
    testResults[i] = k.nextInt();
    totalScore += testResults[i];
}

最后,我们不需要循环打印平均值。我们可以只做一次。我们不需要变量testNum,因为我们可以像以前一样使用testResults.length

System.out.println("The average of all your tests is " + (totalScore / testResults.length));

您将遇到的最后一个问题是integer division。我会让你自己解决这个问题。

最终代码:

private static int[] testResults = new int[5];

public static void main(String... args) throws Exception
{
    Scanner k = new Scanner(System.in);
    int testGrades = 0;

    for (int i = 0;i < testResults.length; i++)
    {
        System.out.print("Thank you, now please enter your grade on each test:     ");
        testResults[i] = k.nextInt();
        testGrades += testResults[i];
    }
    System.out.print("The original sequence is: \n   ");
    for (int i = 0;i < testResults.length; i++)
    {
        System.out.print(testResults [i] + ", ");
    }
    System.out.println();
    SortEm(testResults);
    System.out.print("The new sequence is : \n   ");
    for (int i=0; i < testResults.length; i++)
    {
        System.out.print (testResults[i] + ", ");
    }
    System.out.println();
    System.out.println("The average of all your tests is " + (testGrades / testResults.length));
}
private static void SortEm (int [] ar)
{
    int temp;
    for (int i = ar.length - 1; i > 0; i--)
    {
        for (int j = 0; j < i; j++)
        {
            if (ar[j] > ar[j + 1])
            {
                temp = ar[j];
                ar[j] = ar[j + 1];
                ar[j+1] = temp;
            }
        }
    }
}

【讨论】:

  • 我也不明白你为什么改变 - public static void main(String[] args) - to - public static void main(String... args) throws Exception -
  • @MacKenzieCutler 我已经从我的 IDE 运行它并且它工作正常。如果您愿意,请发布错误。对main 的签名更改不相关。 IntelliJ 自动完成。
  • 作为我课程的一部分,我需要使用 Dr. Java 程序,这些是我的错误:我将它添加到问题中,因为它超出了字符限制
【解决方案2】:

您的程序无法识别您的变量,因为您在循环中声明了它们。在循环内声明的变量不存在于循环外。试试这个:

int tesGrades = 0;
for (int i = 0;i < testResults.length; i++)
{
    System.out.print("Thank you, now please enter your grade on each test:     ");
    testGrades = k.nextInt();
}

同样你执行这个循环的方式,testGrades 一直被覆盖,除了最后一个,你不会有任何输入。试试:

testResults[i] = k.nextInt();

代替:

testGrades = k.nextInt();

这将使用所有输入的测试分数填充 testResults 数组。

【讨论】:

    【解决方案3】:

    将第一个循环更改为:

    for (int i = 0;i < testResults.length; i++)
        {
            System.out.print("Thank you, now please enter your grade on each test:     ");
            testResults[i] = k.nextInt(); // <-- 
        }
    

    【讨论】:

      猜你喜欢
      • 2021-09-18
      • 1970-01-01
      • 2018-11-12
      • 1970-01-01
      • 2016-04-18
      • 2021-01-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多