【问题标题】:Displaying Arraylist from another method从另一个方法显示 Arraylist
【发布时间】:2017-06-06 04:30:26
【问题描述】:

我在这里遇到的问题是我想在一个单独的文件中输出三个学生分数的字母等级,格式为:

name1   score1
name2   score2
name3    score3

在乐谱和姓名之间有制表符。

我在这里面临的问题是,如果您向下滚动到我的 toString2 方法,我将运行我的程序,它应该接受三个分数并根据我的计算输出正确的字母等级。相反,我的程序进入了一个不受控制的循环并以 [] 结束。我该如何解决这个问题?

 package file;

 import java.io.File;
 import java.io.FileNotFoundException;
import java.util.ArrayList;
import java.util.Scanner;

 public class ReadData2 
{
ArrayList<String> name = new ArrayList<String>();
ArrayList<Double> score  = new ArrayList<Double>();
ArrayList<String> lettergrade = new ArrayList<String>();
double mean;
double std;

public ReadData2()
{
    mean= 0;
    std=0;
}
public  void readData(File file) throws FileNotFoundException 
{
    //File file = new File("data.txt");
    Scanner scanner = new Scanner(file);
    int l = 0;


    while (scanner.hasNextLine()) { 
        String line = scanner.nextLine();
        String [] words = line.split("\t"); 
        name.add(words[0]); 
        score.add(Double.parseDouble(words[1]));
    }
}

public String toString()
{

    StringBuilder out = new StringBuilder();
    for(String n: name)
    {
        out.append(n);
        out.append("\n");

    }
    for(double n: score)
    {
        out.append(n);
        out.append("\n");   
    }
    return out.toString();      
}   

public double fndMean()
{
    double mean  = 0;
    double sum = 0;
    for(Double n: score)
    {
        sum= sum+n; 
    }
    mean= sum/score.size();
    return mean;
}

public double fndStandard()
{
    double sumOfDifferences = 0;
    double mean = fndMean();
    for(Double n: score)
    {
        sumOfDifferences += Math.pow((n- mean),2);  
    }
    double temp = sumOfDifferences/ score.size();
    return Math.sqrt(temp);
}
public  ArrayList<String>  toString2(File file) throws FileNotFoundException
{
    StringBuilder grades = new StringBuilder();
    double mean1 = fndMean();
    double std1 = fndStandard();

    Scanner scanner = new Scanner(file);
    int l = 0;

    while (scanner.hasNextLine()) { 
        String line = scanner.nextLine();
        String [] words = line.split("\t"); 
        name.add(words[0]); 
        score.add(Double.parseDouble(words[1]));

        for(double n: score)
        {
            grades.append(n);
            grades.append("\n");    
        }


        for(int i = 0; i < ((score.size())) && i < name.size(); i++)
        {
            if(mean1 +std1 < score.get(i))
            {
                System.out.println("A");
            }
            else if( (score.get(i) >= mean1+(std1/3)) &&  (mean1 +std1)> score.get(i))
            {
                System.out.println("B");
            }
            else if( (score.get(i) >= mean1-(std1/3)) &&  (mean1 +(std1/3))> score.get(i))
            {
                System.out.println("C");

            }
            else if( (score.get(i) >= mean1-(std1)) &&  (mean -(std1/3))> score.get(i))
            {
                System.out.println("D");
            }   
            else if(mean1 - std1 > score.get(i))
            {
                System.out.println("F");
            }

        }
    }
    return lettergrade;
}
}

【问题讨论】:

  • 您可以尝试更好地格式化您的代码吗?最好使用 IDE 自动格式化。
  • 好吧,我刚刚做了
  • 谢谢,那么错误在哪里?你用过调试器吗?
  • 所以没有错误,只是我的输出进入了一个不受控制的循环。只有三个分数,但输出很多。

标签: java for-loop arraylist methods indexing


【解决方案1】:

相反,我的程序进入了一个不受控制的循环,并以 []。我该如何解决这个问题?

你得到一个空的 [] 因为你并没有真正修改你的“字母等级”数组。您只是将成绩打印到控制台,而不是真正将其添加到数组中。除了 sysout 语句之外,您还需要将成绩添加到数组中。例如

lettergrade.add("B");

【讨论】:

  • 当我尝试得到 [F, C, A, F, F, C, A, F, C, F, C, A, F, C, A]
  • @JustAJAVAGUY,您的输入和预期输出是什么?
  • name1 score1 name2 score2 name3 score3 // 我的输入来自一个 txt 文件,我的输出应该根据 score1-score3 显示字母等级
  • 它们也不应该放在方括号中,只是降序类似于列
猜你喜欢
  • 1970-01-01
  • 2018-11-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-13
  • 2020-08-19
  • 2018-05-29
相关资源
最近更新 更多