java - 一维ArrayList基本统计计算器

标签 java arrays netbeans arraylist statistics

我是编程新手。 (非常) 我正在尝试创建一个统计计算器。 我并不担心公式以及我仍然需要输入的内容。评论之所以存在,是因为这些是我尝试过的事情。(但没有成功)它是一个菜单驱动的程序。 我选择“a”进入系列菜单,然后再次选择“a”输入数字。 我正在尝试修复代码以接受未知值的 ArrayList。这样人们就可以输入任意数量的数字,并且程序的其余部分将继续正常运行。我现在将其设置为 5 个数组。

(1) 有没有办法修复代码以接受 ArrayList?使用评论你可以看到我尝试过的事情。当我现在运行它时,它可以编译并运行良好,但是当我使用 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]);
            }
            
        }

}

最佳答案

改变

ArrayList<integer> myList = new ArrayList<>();

static ArrayList<Integer> myArrayList = new ArrayList<>();

并将其从 main 移出到类中,以便您可以在 dataInput() 中使用它像这样:

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

当然还有更多需要修复的地方,但这应该能让您克服 ArrayList 的忧郁症。

<小时/>

如果你仔细观察 mainMenu()在 main 中使用,您应该看到如何使用 seriesMenu()以及。 seriesMenu()返回一个您不执行任何操作的值。它没有保存在像 mainMenu() 这样的 var 中返回值保存在menuOption中。 seriesMenu()需要 do while它自己的循环。

此外,while do while构建你绕过开关的想法是相当古怪的。不要认为您需要它比单个 do while 更复杂主菜单和单个 do while对于seriesMenu() .

<小时/>

您需要更改其余代码,以便它可以与 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-switch-while 的。您想在内部开关上执行相同的模式。

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

case: a中进行切换看起来一样:

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

关于java - 一维ArrayList基本统计计算器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27008906/

相关文章:

java - 重新排列 int 数组中的 int 值 java

java - 找不到在 Scene Builder 中添加的 CSS StyleSheet

java - 标准:如何让没有 parent 的 child

java - Ant 需要 travis 服务器上的 junit.jar

arrays - 如何使用 Powershell 通过其值查找数组中元素的索引

java - 无法正确添加 Java ME SDK 插件

java - 错误的符号类型,代码不可编译

java - 当访问分配的私有(private)变量时,它们返回0

java - 如何最好地使可读的过多构造函数参数

c++ - 在 C++ 中返回 unique() 函数