从java中的数组中查找最大,第二大,第二小和最小的int

Posted

技术标签:

【中文标题】从java中的数组中查找最大,第二大,第二小和最小的int【英文标题】:Finding the largest, second largest, second smallest, and smallest int from an array in java 【发布时间】:2018-04-07 05:48:18 【问题描述】:

我正在使用一种方法来打印最大、第二大、最小和第二小的整数。这是我迄今为止的基地:

     case 1:
        System.out.print("\nEnter the Limit: ");
        limit = input.nextInt();
        System.out.println(pairs(limit));
        break;

这是目前被调用的方法:

// Case 1 Method : Largest and Smallest Pairs
   public static String pairs(int limit) 
      System.out.println("*** Largest and Smallest Pairs");
      return "";
   

实际输出格式如下 (最大,次大),(最小,次小) 我以前从未使用过数组,我不确定如何使用循环来查找值。我该如何开始?

这是我的程序的完整代码。您可以忽略第二种和第三种情况,但是,我仍然需要第三种情况的帮助。我需要按顺序显示所有素数。这是要求: Twin Prime Numbers:这应该让用户指定一个限制n(我使用limit代替)(如果n是1000,那么考虑1 到 1000),并列出直到 n 的孪生素数对。样本运行为 (3,5),(5,7),(11,13),(17,19)

完整代码:

import java.util.Scanner;

public class PatternChecker

   // The scanner is accessible for every method included
   static Scanner input = new Scanner(System.in);

   public static void main(String[] args) 

      // Variables
      int limit;

      System.out.println("List of Pattern Checker problems:\n1) Largest and Smallest Pairs\n2) Patterns of Triangles\n3) Twin Prime Pairs\n4) Quit");
      System.out.print("Choice: ");
      int choice = input.nextInt();

      // The switch statement for the variable "choice" and each case
      switch (choice) 
         default:
            System.out.println("\n*** INVALID OPTION");
            break;
         case 1:
            System.out.print("\nEnter the Limit: ");
            limit = input.nextInt();
            System.out.println(pairs(limit));
            break;
         case 2:
            System.out.println("\nEnter the Limit: ");
            limit = input.nextInt();
            System.out.println(triangleOne(limit));
            System.out.println(triangleTwo(limit));
            System.out.println(triangleThree(limit));
            System.out.println(triangleFour(limit));
            break;
         case 3:
            System.out.println("\nEnter the Limit: ");
            limit = input.nextInt();
            System.out.println(primePairs(limit));
            break;
         case 4:
            System.out.println("\n*** End");
            break;
      
   

   // Case 1 Method : Largest and Smallest Pairs
   public static String pairs(int limit) 
      System.out.println("*** Largest and Smallest Pairs");
      return "";
   
// Case 2 Method: Patterns of Triangles (Triangle One)
   public static String triangleOne(int limit) 
      System.out.println("*** Patterns of Triangles");
      for (int x = 1; x <= limit; x++) 
         for (int y = 1; y <= x; y++) 
            System.out.print(y + " ");
         
         System.out.println();
      
      return "";
   
   // Case 2 Method: Patterns of Triangles (Triangle Two)
   public static String triangleTwo(int limit) 
      for (int x = limit; x > 0; x--) 
         for (int y = 1; y <= x; y++) 
            System.out.print(y + " ");
         
         System.out.println();
      
      return "";
   
   // Case 2 Method: Patterns of Triangles (Triangle Three)
   public static String triangleThree(int limit) 
      for (int row = 1; row <= limit; row++) 
         for (int space = (limit - row); space > 0; space--) 
            System.out.print("  ");
         
         for (int num = row; num > 0; num--) 
            System.out.print(num + " ");
         
         System.out.println();
      
      return "";
   
   // Case 2 Method: Patterns of Triangles (Triangle Four)
   public static String triangleFour(int limit) 
      for (int row = limit; row >= 0; row--) 
         for (int space = (limit - row); space > 0; space--) 
            System.out.print("  ");
         
         for (int num = 1; num <= row; num++) 
            System.out.print(num + " ");
         
         System.out.println();
      
      return "";
   
// Case 3 Method: Twin Prime Pairs
   public static String primePairs(int limit) 
      System.out.println("*** Twin Prime Numbers up to " + limit);

      return "";
   

【问题讨论】:

我在这里看不到任何数组......所以你的问题是什么?什么是limit,为什么会有一个没有开关的case?请提供一个最小的可测试代码片段来解释您的问题! 应该解释更多@JoshuaK 你需要从数组中获取它还是列表也可以? 我不知道该怎么做,我只是假设一个数组@user641887 好的,我已经用列表写了一个快速答案。希望这会有所帮助。 【参考方案1】:

好的,根据评论,我用 arraylists 写了一个快速答案。希望这可以帮助。

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Scanner;

public class MaxMin 

    private List<Integer> alist = new ArrayList<Integer>();

    public static void main(String args[]) 

        MaxMin maxmin = new MaxMin();
        maxmin.init();

    

    public void init() 

        System.out.println("Welcome!!!");
        readFromUser();
        printUserList();
        doSort();
        display();  
    

    public void readFromUser() 

        Scanner scanner = null;

        try 
            scanner = new Scanner(System.in);
            System.out.print("Enter the total number of elements :");
            Integer totalElements = scanner.nextInt();

            for (int i=0;i<totalElements;i++) 
                System.out.print("Enter the " + i +" number");
                alist.add(scanner.nextInt());
            

        catch(Exception e) 
            e.printStackTrace();
         finally 
            scanner.close();
        

    

    public void printUserList() 

        System.out.println("user entered list is :");
        System.out.println(alist);
    

    public void doSort() 

        Collections.sort(alist);
    

    public void display() 

        System.out.println("(" +alist.get(alist.size()-1)+ "," +alist.get(alist.size()-2)+ ")" + "(" +alist.get(0)+"," +alist.get(1) +")"); 
    



【讨论】:

【参考方案2】:

我希望这不是作业问题,但想法是对数组使用循环,并跟踪最大和最小数字。

从将最小数字变量分配给 Integer.MAX_VALUE 开始,因此您检查的第一个数字将分配给最小数字,因为除 2^31 - 1 之外的所有整数值都小于 Integer.MAX_VALUE,并且您这样做也是最大的,但使用 Integer.MIN_VALUE。

然后,每当您再次分配最大的数字时,您将 secondBiggest 变量分配给“最大”变量。

考虑到这一点,您只需要遍历数组的值并检查它们是大于最大的(在其中重新分配它)还是小于最小的(与最大相同)。

int[] array = new int[]5, 3, 4, 1, 2;

for(int i = 0; i < array.length; i++)
    System.out.println(array[i]);

^ 遍历数组的例子

【讨论】:

另一个答案更好,但如果你要使用它,它需要考虑数组是否少于两个元素。【参考方案3】:

我为你创建了一个例子。

首先它会生成一个质数列表,直到限制(在本例中为硬编码 100)。接下来它要求所有素数对并打印它们。这些对存储在一个 ArrayList 中,因此很容易获得第一对和最后一对。

这并不难理解,所以我不知道该解释什么。查看代码,如果您有任何问题,请随时提出。

import java.util.ArrayList;

public class PatternChecker 
  public ArrayList<Integer> primes = new ArrayList<>();
  public static void main(String[] args) 
    PatternChecker pc = new PatternChecker();
    pc.detectPrimes(100);
    ArrayList<int[]> numbers = pc.getPairs();
    System.out.println("Print all pairs: ");
    numbers.stream().forEach((intA)->System.out.println(intA[0]+" / "+intA[1]));
    System.out.println("Print just the greatest and the smallest pair: ");
    System.out.println("("+numbers.get(0)[0]+","+numbers.get(0)[1]+")");
    System.out.println("("+numbers.get(numbers.size()-1)[0]+","+numbers.get(numbers.size()-1)[1]+")");
  

  public void detectPrimes(int limit) 
    for(int i=2;i<limit;i++)
      if(isPrime(i))
        primes.add(i);
  
  protected boolean isPrime(int no) 
    for(int i=0;i<primes.size();i++)
      if(no % primes.get(i) == 0) return false;
    return true;
  
  public ArrayList<int[]> getPairs() 
    ArrayList<int[]> result = new ArrayList<>();
    int last = primes.get(0);
    for(int i=1;i<primes.size();i++) 
      if(primes.get(i)==last+2) 
        int[] resH = new int[2];
        resH[0] = last;
        resH[1] = primes.get(i);
        result.add(resH);
      
      last = primes.get(i);
    
    return result;
  

【讨论】:

以上是关于从java中的数组中查找最大,第二大,第二小和最小的int的主要内容,如果未能解决你的问题,请参考以下文章

如何在excel中找出除去最大值以外的第二大值

求一个一维数组中第二大的元素,及其在原数组中的下标。

鸡尾酒排序

用Java找出一个整数数组中最大的值,并返回最大值的数组下标,尤其是有两个或是三个最大值时

如何用Java找出一个整数数组中最大的值,并返回最大值的数组下标,尤其是有两个或是三个最大值时?

使用分治法从给定列表中查找第二小的数字