【问题标题】:One-dimensional ArrayList Basic Statistical Calculator一维 ArrayList 基本统计计算器
【发布时间】:2015-01-16 12:03:48
【问题描述】:

我是编程新手。 (非常) 我正在尝试创建一个统计计算器。 我不担心公式,也不担心我还需要输入什么。 cmets 在那里,因为那些是我尝试过的东西。(没有工作)这是一个菜单驱动的程序。 我选择“a”进入系列菜单,再次选择“a”输入数字。 我正在尝试修复代码以接受未知值的 ArrayList。 这样人们可以输入任意数量的数字,并且程序的其余部分将继续正常运行。我现在将其设置为 5 个数组。

(1) 有没有办法修复代码以接受 ArrayList?使用 cmets 你可以看到我尝试过的东西。当我现在运行它时,它编译并运行良好,但是当我使用 ArrayList 时出现错误。我真的需要一些帮助。我被困住了。在进入下一个案例之前,我正在处理这一部分。我希望它只提示用户输入数字列表,然后根据要求使用它来执行计算器中的其余功能。请帮忙。这可能很简单,但它杀死了我。

(2) 另外,当我运行代码并到达可以输入第一个数字的位置时,它会一直带我回到主菜单。我希望它留在子菜单/系列菜单中,直到用户选择“q”。

import java.util.Scanner; // Scanner is in the java.util package
//import java.util.ArrayList;
//import java.util.List;
class FloatWrapper {
  public float value;
  public FloatWrapper(float param) {
    value = param;
  }
}

public class BasicCalculator {

  public static void main(String[] args) {
    int menuOption = 0;
    //List myList = new ArrayList();
    double[] myList = new double[5];
    //ArrayList<integer> myList = new ArrayList<>();
    int counter = 0;

    while (menuOption != 'q')
      do {
        menuOption = mainMenu();
        switch (menuOption) {
          case 'a':
            {
              switch (seriesmenu()) {
                case 'a':
                  myList[counter] = dataInput();
                  counter++;
                  break;

                case 'q':
                  mainMenu();
                  break;
                default:
                  seriesmenu();
              }
            }
            break;

            //case 'b' :
            //case 'c' :
            //case 'd' :
            //case 'e' :

          case 'f':
            display(myList);

            break;
            //case 'g' :
            //case 'h' :
            //case 'i' :
            //case 'j' :
          case 'q':
            System.exit(0);
            return;
        }
      }
      while (menuOption != 'q');
  }

  //Main Menu Display
  static char mainMenu() {
    Scanner input = new Scanner(System.in);

    System.out.println("\n\nBASIC CALCULATOR");
    System.out.println(" a. Insert Series");
    System.out.println(" b. Mean");
    System.out.println(" c. Median");
    System.out.println(" d. Mode");
    System.out.println(" e. Standard Deviation\n");
    System.out.println(" f. Show Series");
    System.out.println(" g. Show Elements Greater than Mean");
    System.out.println(" h. Show Elements Less than Mean");
    System.out.println(" i. Show Series in Order");
    System.out.println(" j. Show Full Report\n");
    System.out.println(" q. Quit");
    System.out.print("Insert option: ");

    return (input.next().charAt(0));
  }

  //Menu to insert values
  static char seriesmenu() {
    Scanner input = new Scanner(System.in);

    System.out.println("\n\nSeries Options");
    System.out.println(" a. Enter New Number");
    System.out.println(" q. Back to Calculator");
    System.out.print("Insert option: ");
    return (input.next().charAt(0));
  }

  //Reads input from keyboard (menu, values, etc)
  static double dataInput() {
    Scanner scanner = new Scanner(System.in);
    Scanner input = new Scanner(System.in);
    System.out.print(" Enter a Number: ");
    double i = input.nextInt();

    return i;
  }

  //displays array
  static void display(double[] args) {
    for (int i = 0; i < args.length; i++) {
      System.out.println(args[i]);
    }

  }

}

这是我的更新代码,但我遇到了很多错误,我想我想回到原来的再试一次。

import java.util.Scanner; // Scanner is in the java.util package
import java.util.ArrayList;
import java.util.List;
class FloatWrapper{
  public float value;
  public FloatWrapper(float param){
     value=param;
  }
}

public class BasicCalculator {	
    
    ArrayList<Integer> myArrayList = new ArrayList<>();
    
    public static void main(String[] args) 
    {
        int menuOption = 0;
        //List myList = new ArrayList();
        double [] myList = new double [10];
        
        int counter =0;

	    //while(menuOption != 'q')
                do{
               menuOption = mainMenu();
		switch(menuOption)
                {
                    case 'a':
                    {
                        do{
                        seriesOption = seriesmenu();
                        switch(seriesmenu())
                            
                            { 
                                case 'a' :
                                myList[counter] = dataInput();
                                    counter++;
                                break;
                                    
                                case 'q':
                                    mainMenu();
                                break;
                                default:
                                    seriesmenu();
                        } while (seriesOption != 'q');
                    }break;
                        
                    //case 'b' :
                    //case 'c' :
                    //case 'd' :
                    //case 'e' :
                        
                    case 'f' : display(myList);
                        
                    break;
                    //case 'g' :
                    //case 'h' :
                    //case 'i' :
                    //case 'j' :
                    case 'q': System.exit(0);
                        return;
                } 
	   }
                while(menuOption != 'q');
    }
   
	//Main Menu Display
	static char mainMenu()
        {
            Scanner input=new Scanner(System.in);

	   System.out.println("\n\nBASIC CALCULATOR");
           System.out.println(" a. Insert Series");
           System.out.println(" b. Mean");
           System.out.println(" c. Median");
           System.out.println(" d. Mode");
           System.out.println(" e. Standard Deviation\n");
           System.out.println(" f. Show Series");
           System.out.println(" g. Show Elements Greater than Mean");
           System.out.println(" h. Show Elements Less than Mean");
           System.out.println(" i. Show Series in Order");
           System.out.println(" j. Show Full Report\n");
           System.out.println(" q. Quit");
           System.out.print("Insert option: ");
           
           return(input.next().charAt(0));	
        }
        
        //Menu to insert values
        static char seriesmenu()
        {
            Scanner input=new Scanner(System.in);

	   System.out.println("\n\nSeries Options");
           System.out.println(" a. Enter New Number");
           System.out.println(" q. Back to Calculator");
           System.out.print("Insert option: ");
           	 return(input.next().charAt(0));	
        }
        
        //Reads input from keyboard (menu, values, etc)
	static double dataInput()
        {
            Scanner scanner = new Scanner(System.in);
            Scanner input=new Scanner(System.in);
            System.out.print(" Enter a Number: ");
            //double i = input.nextInt();
            int i = input.nextInt();
            myArrayList.add( i );
            return i;
        }
        
        //displays array
        static void display(double [] args)
        {
            for (int i = 0; i < args.length ; i++)
            {
                System.out.println(args[i]);
            }
            
        }

}

【问题讨论】:

  • 如果您出于几个不同的原因取消注释 mylist,您会看到一个错误 - 1) integer 不是 Java 中的类型,您可能需要 Integer 和 2) 您可以'不要在该方法的范围内声明两种名称为myList 的变量。
  • but when I use the ArrayList I get an error. 您当然应该指定异常详细信息(错误消息、堆栈跟踪、引发异常的行)。

标签: java arrays netbeans arraylist statistics


【解决方案1】:

改变

ArrayList&lt;integer&gt; myList = new ArrayList&lt;&gt;();

static ArrayList&lt;Integer&gt; myArrayList = new ArrayList&lt;&gt;();

并将它从 main 移到类中,以便您可以在 dataInput() 中使用它,如下所示:

int i = input.nextInt();
myArrayList.add( i );

当然还有更多需要解决的问题,但这应该会让你克服 ArrayList 的忧郁。


如果您仔细查看 mainMenu() 在 main 中的使用方式,您应该也会了解如何使用 seriesMenu()seriesMenu() 返回一个你不做任何事情的值。它没有保存在像mainMenu() 这样的var 中,返回保存在menuOption 中。 seriesMenu() 需要一个自己的 do while 循环。

此外,您在开关周围使用的while do while 构造非常古怪。不要认为你需要它比 mainMenu 的单个 do whileseriesMenu() 的单个 do while 更复杂。


您需要更改其余代码,以便它与 ArrayList 一起使用:

  //Reads input from keyboard (menu, values, etc)
  static void dataInput() {
    Scanner input = new Scanner(System.in); 
    System.out.print(" Enter a Number: ");
    int i = input.nextInt();
    myArrayList.add( i );    
  }

  //displays array
  static void display(ArrayList<?> args) {
    for (int i = 0; i < args.size(); i++) {
      System.out.println(args.get(i));
    }
  }

请注意,dataInput() 不再返回任何内容,因此请更改 myList[counter] = dataInput();dataInput();


好的,我会给你一个关于内部do while循环的重要提示

请注意该模式是如何进行切换时的。您想在内部开关上执行相同的模式。

  do {
    menuOption = mainMenu();
    switch (menuOption) {
    ...
    }
  } while (menuOption != 'q');

使case: a 中的开关看起来一样:

          do {  
            seriesOption = seriesmenu(); 
            switch (seriesOption) {
            ...
            }
          } while (seriesOption != 'q');    

【讨论】:

  • 当我没有声明 'q' 时,我该怎么做才能将我回收到主菜单。我想让它到达用户选择何时停止输入数字并返回主菜单的位置菜单。
  • 在我进入“输入新号码”后,我输入了“1 2 3 4 5”,然后当我显示系列('f')时,它只显示了第一个输入“1。 "
  • 说实话,我不知道你的意思。我对这一切都很陌生。我可以解决 while do while 的问题,但是我对您对保存返回的含义感到困惑。我在每个菜单的末尾都有相同的返回语句。
  • 我更改了 dataInput 以反映您所说的内容。我在第 106 行遇到两个错误。“myarrayList.add(i);”它告诉我要为它添加一个返回语句......另外,不能在静态上下文中引用非静态变量。
  • 关于'返回被保存',请注意menuOption = mainMenu(); 如何将mainMenu() 返回的内容保存在menuOption 中。请注意seriesmenu() 永远不会保存在任何seriesOption 中。您需要对内部 do while 执行此操作,这将防止 seriesmenu() 每次都将您拉回主菜单。
猜你喜欢
  • 1970-01-01
  • 2018-10-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多