【问题标题】:Input 10 Strings, print the largest One输入10个字符串,打印最大的一个
【发布时间】:2012-03-18 21:42:01
【问题描述】:

我是 java 新手,在编写代码时遇到问题。问题是,我从用户那里获取了 10 个字符串,并希望打印所有 10 个字符串中最大的一个。输入部分运行良好,但是在使用 if 条件时出现 IDE 错误:“二进制 '>' 运算符的错误操作数” .代码如下..

import java.util.Scanner;
import java.io.InputStream;

public class Largest_String {


    public static void main(String[] args) {


         Scanner input=new Scanner(System.in);
         System.out.println("Please Enter The 10 Strings: ");
        for(int i=1; i<=10; i++){


            System.out.print(i+") ");
            String str=input.nextLine();

            String array[]=new String[10];



            for(int j=10; j>0; j++){

            if(array[i]>array[j]){

            System.out.println("The Largest String if"+ array[i]);
            }

            }
        }
    }
}

【问题讨论】:

  • “最大字符串”是什么意思?最长?还是Ascii总和最大?还是什么?
  • 此外,在您将j++ 更正为j-- 后,您使用i(和j)的索引将为您提供一个ArrayIndexOutOfBounds。

标签: java java.util.scanner


【解决方案1】:
  1. 使用array[i].length&gt;array[j].length比较字符串的长度。

  2. for(int j=10; j&gt;0; j++):当 j 大于 array 中的元素时,这会给你一个 IndexOutOfBoundsException

  3. 想法:

    1. 读入用户输入
    2. 检查此输入是否比之前输入的值长(使用 0 作为初始值)

【讨论】:

    【解决方案2】:

    您需要仔细查看循环嵌套。看起来有点东西 像这样:

    for (/* i */) {
        String array[] = new String[10];
        for (/* j */) {
            /* ... */
        }
    }
    

    这种嵌套的最终结果是您正在创建 10 个数组,每个 有十个元素。将数组移出外部for循环,并制作 你肯定知道为什么。

    接下来,关注循环索引以及如何使用它们来索引 数组:

    for (int i = 1; i <= 10; i++) {
        String array[] = new String[10];
        for (int j = 10; j > 0; j++) {
            if (array[i] > array[j]) {
            }
        }
    }
    

    声明为new String[10] 的数组具有有效索引:0123456789。您在此访问 array[10] 循环,它将因超出范围的异常而爆炸。 (你也是 递增j++,但打算从数组的末尾开始 并倒计时。糟糕。)

    当迭代一个数组时,最好坚持这个公式:

    for (int i = 0; i < array.length; i++)
    

    如果你想倒计时,你可以,但比较棘手:

    for (int i = array.length - 1; i >= 0; i--)
    

    (同样,n-1 到 0,包括在内。)This question 显示了另外两种也适用于向后迭代的形式:

    for (int i = array.length; --i >= 0; )
    for (int i = array.length; i-- > 0; )
    

    虽然我不喜欢 for 将测试和迭代步骤结合在一起的循环 一口气,我绝对可以尊重这两个都能完成工作 正确并且可能是惯用的。

    向后迭代很少见。

    【讨论】:

    • 伟大的先生,您的友好答复。我很高兴从您的金句中获得有用的知识。非常感谢。
    【解决方案3】:

    这里有一个稍微不同的方法:

    import java.util.Scanner;
    import java.io.InputStream;
    
    public class Largest_String {
        public static void main(String[] args) {
             Scanner input=new Scanner(System.in);
             System.out.println("Please Enter The 10 Strings: ");
    
             String longest = "";
    
             for(int i=0; i<10; i++){
                System.out.print("Enter String "+(i+1)+": ");
                String str=input.nextLine();
                if( str.length() > longest.length() )
                {
                   longest = str;
                }
            }
            System.out.println("The Largest String is "+ longest);
         }
     }
    

    评论:习惯于从 0 开始循环

    【讨论】:

    • 在作业标签问题上粘贴代码并不理想,您可以有想法回答。
    • 请原谅,我以后不要了
    • 非常感谢先生即将完成它,实际上我是新人并且不正确了解java的语法。但是你们帮了我,我做到了。
    • 你应该接受一个正确的答案。如果其中没有一个是正确的,请自己发布正确的并接受那个。祝你好运!
    【解决方案4】:

    您可以使用数组中单个字符串的lenght()。这是以整数类型返回给定字符串长度的方法。您将 &gt; 运算符用于字符串,将其用于整数,即每个字符串的长度。

    【讨论】:

      【解决方案5】:

      受 '>' 操作符约束的数组是字符串类型,所以这不是一个有效的操作符。

      如果要确认最长的字符串(字符数),那么你应该对字符串的长度进行如下比较:

      if(array[i].length() >array[j].length() ){
      

      【讨论】:

      • 非常感谢大家,我已经做到了。我从你们那里学到了新的有用的东西。再次感谢大家。
      【解决方案6】:
      array[i].length()>array[j].length()
      

      您需要比较字符串长度而不是字符串本身。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-02-28
        • 2021-07-03
        • 2021-09-04
        • 2022-11-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-01-07
        相关资源
        最近更新 更多