2

开发一个自上而下的设计并编写一个程序,以逐个农场为合作农场组制作美味爆米花生产的条形图。

  • 程序的输入是一系列数据集,每行一个,每个数据集代表一个农场的产量。
  • 每个数据集都包含一个场的名称。后跟一个逗号和一个或多个空格,一个十进制数表示种植的英亩数,一个或多个空格,一个整数表示该农场生产的爆米花罐子的数量。
  • 输出是一个条形图,用于识别每个农场并以每英亩的品脱玉米显示其产量。
  • 每个农场的输出是一行,农场的名称从一行的第一列开始,条形图从第 30 列开始。条形图中的每个标记代表每英亩 25 品脱罐爆米花。
  • 今年的生产目标是每英亩500罐。对于产量未达到此目标的农场,图表中应出现竖线,对于产量大于或等于每英亩 500 罐的农场,使用特殊标记。

例如,给定输入文件

Orville’s Acres, 114.8 43801
Hoffman’s Hills, 77.2 36229
Jiffy Quick Farm, 89.4 24812
Jolly Good Plantation, 183.2 104570
Organically Grown Inc., 45.5 14683

输出将是:

Popcorn Co-op
Production in Hundreds
of Pint Jars per Acre
Farm Name 1 2 3 4 5 6
---|---|---|---|---|---|
Orville's Acres *************** |
Hoffman's Hills ****************** |
Jiffy Quick Farm *********** |
Jolly Good Plantation *******************#**
Organically Grown Inc. ************ |

这是我已经运行并打印正确格式的代码,但它有一个异常错误。我试图将一个字符串分成农场名称,然后是双英亩,最后是一个 int jars。输入文件是

Orville’s Acres, 114.8  43801
Hoffman’s Hills, 77.2  36229
Jiffy Quick Farm,       89.4  24812
Jolly Good Plantation,  183.2  104570
Organically Grown Inc., 45.5        14683

所有空格的原因是我希望它只是读取带有数据的行。

这是我的源代码

import java.util.Scanner;
import java.io.*;

public class Popcorn
{

public static void main(String args[])throws Exception
{

    printHeading(); 

    System.out.print("Input file name you want to read from: ");

    Scanner in = new Scanner(System.in);    

    String fileName = in.next();    //declares fileName a string that uses in as input

    Scanner input = new Scanner(new FileReader(fileName));  //Declares input as the fileName and reads the file in

    int jars;
    double acres;
    String amount;
    String farmName;
    System.out.println();
    System.out.println("\t\t\tPopcorn Co-op");
    System.out.println();
    System.out.println("\t\t\t\tProduction in Hundreds");
    System.out.println("\t\t\t\tof Pint Jars per Acre");
    System.out.println("Farm Name\t\t\t   1   2   3   4   5   6");
    System.out.println("\t\t\t\t---|---|---|---|---|---|");


    while (input.hasNextLine())
    {


        String inputLine = input.nextLine();    

        if (inputLine.isEmpty())
        {   

        }
        else 
        {
            farmName = inputLine.substring(0,inputLine.indexOf(','));
            String inputLine2 =  inputLine.substring(inputLine.indexOf(','),inputLine.length());
            Scanner line = new Scanner(inputLine2);
            acres = line.nextDouble();
            jars = line.nextInt();
            System.out.println(farmName + jars + acres);

        }

    }
}

private static void printHeading(){


    System.out.println("Name");  //this assigns what printHeading will print
    System.out.println("CSC 201-55468 Section 01PR");
    System.out.println("Fall 2012");
    System.out.println("Popcorn Project");
    System.out.println();
    }

}
4

1 回答 1

0
String inputLine2 =  inputLine.substring(inputLine.indexOf(',') + 1);

这会跳过原行没有的逗号。

也许是:

line.skip("[ \t]+");

这是跳过前面的空间所必需的。


尝试使用 indexOf+1 的代码后(不跳过):

...
Orville’s Acres43801114.8
Hoffman’s Hills3622977.2
Jiffy Quick Farm2481289.4
Jolly Good Plantation104570183.2
Organically Grown Inc.1468345.5

考虑到:

            System.out.println(farmName + jars + acres);

因为这似乎是家庭作业,所以我把它留在那里。

于 2012-10-06T20:36:57.950 回答