【问题标题】:How to print return from overloaded methods in Java如何在 Java 中打印重载方法的返回值
【发布时间】:2016-02-01 18:12:26
【问题描述】:

我正在尝试对不同字符串的 Ascii 值求和,同时遵循以下说明:

创建两个重载方法。一个将给出总和的 字符串中每个字符的 ascii 值和另一个将 产生两个字符串的 ascii 值之和。

使用我已经编写的方法,我如何在我的 main 中打印出总和?谢谢!

public class Exam3Question2 
{
    public static int sumAscii(String Input)
    {

        String s = Input; 
        int sum = 0;
        for (int i = 0; i < s.length(); i++)
        {
            sum+= (int)s.charAt(i);
        }
        return sum;
    }

    public  int sumAscii( String Input1, String Input2)
    {
        int sum = sumAscii(Input1) + sumAscii(Input2);
        return sum;
    }
    public static void main(String[] args) 
    {
        Exam3Question2 c = new Exam3Question2();
        Scanner in = new Scanner(System.in);
        String word;
        System.out.println("Enter some text");
        word = in.nextLine();
        sumAscii(word);
        int sum1 = c.sumAscii(Input1);
        int sum2 = c.sumAscii(Input1, Input2);
        int sum3 = sum1 + sum2;
        System.out.println("The sum of the two strings is: " + sum3);
    }
}

【问题讨论】:

  • 你确定计算每个字符的ascii值的逻辑吗?首先关注这个,main方法不会是问题
  • @BalwinderSingh 这是获取字符串每个字符的 ascii 码的正确方法。
  • @ManosNikolaidis 他希望使用在方法调用期间传递的整数,而不是用于获取给定的 ascii 值
  • @Bob 你打算在哪里使用ValOneValTwo
  • @ManosNikolaidis 我只是想将两个字符串的 ascii 值相加。所以:“ABC”(等于 198)+“ABC”=396。我只是认为我需要两个值才能编写重载方法。我想我只是对这个过程感到困惑。

标签: java methods ascii


【解决方案1】:

您可能希望将计算单个字符串的方法更改为此,因此它将字符串作为参数并将 userInput 移到方法之外,以使其更干净

public int sumAscii(String userInput)
{

    String s = userInput; 
    int sum = 0;
    for (int i = 0; i < s.length(); i++)
    {
        sum+= (int)s.charAt(i);
    }
    return sum;
}

你的下一个方法实际上可以像这样在新的重载方法中使用上一个方法:

public int sumAscii(String userInput1, String userInput2)
{

int sum = sumAscii(userInput1) + sumAscii(userInput2);
    return sum;
}

你的主要看起来像

 public static void main(String[] args) 
{
//something to invoke constructor and get strings
int sum1Str= sumAscii(userInput1)
int sum2Str = sumAscii(userInput1,userInput2)
System.out.println("The sum of one string is "+sum1Str);
System.out.println("The sum of two strings is " +sum2Str);
}

【讨论】:

    【解决方案2】:

    使用您编写的两种方法,您会像这样打印

    Exam3Question2 c = new Exam3Question2();
    int one = c.sumAscii(0);
    int two = c.sumAscii(0, 0);
    System.out.println("The sum of one String is " + one);
    System.out.println("The sum of two Strings is " + two);
    

    您正在将整数 ValOne ValTwo 传递给这些函数,并且根据您的 cmets,您从未打算使用它们。这些是用于创建重载函数的虚拟变量。为此,建议使用String 变量。由于@The Law 已经提出了使用 for 循环的解决方案,我将简单地添加一个 Java 8 替代方案。

    public int sumAscii(String s) {
        return s.chars().sum();
    }
    
    public int sumAscii(String s1, String s2) {
        return sumAscii(s1) + sumAscii(s2);
    }
    

    然后你会在你的 main 中调用这些:

    public static void main(String[] args) {
        Exam3Question2 c = new Exam3Question2();
        Scanner in = new Scanner(System.in);
    
        System.out.println("Enter some text");
        String word1 = in.nextLine();
    
        System.out.println("Enter some text");
        String word2 = in.nextLine();
    
        int sum1 = c.sumAscii(word1);
        System.out.println("The sum of one string is: " + sum1);
        int sum2 = c.sumAscii(word1, word2);
        System.out.println("The sum of two strings is: " + sum2);
    }
    

    【讨论】:

    • 他获取任何整数的ascii值的逻辑是完全不正确的。 main 方法的调用现在对他没有帮助,但一旦他弄清楚获取任何整数的 ascii 值的逻辑就会这样做
    • 他获取字符串中每个字符的ascii值的逻辑其实是正确的
    • 确实如此。但他希望使用在方法调用期间传递的整数,而不是用于获取给定的 ascii 值
    • @ManosNikolaidis 谢谢!
    • @ManosNikolaidis 在我的主目录中,它表示 Integer1 和 Integer2 的“找不到符号”。怎么了?我很抱歉这么慢。我一直很难用方法。再次感谢您的帮助。
    【解决方案3】:

    您的代码编译有问题吗?我认为你是因为在你的主要语句中你将不存在的变量传递给函数:

    public static void main(String[] args) 
    {
        Exam3Question2 c = new Exam3Question2();
        Scanner in = new Scanner(System.in);
        String word;
        System.out.println("Enter some text");
        word = in.nextLine();
        sumAscii(word);
    
        int sum1 = c.sumAscii(Input1); //What is Input1
        int sum2 = c.sumAscii(Input1, Input2); //What is Input2
    
        int sum3 = sum1 + sum2;
        System.out.println("The sum of the two strings is: " + sum3);
    }
    

    另外,不需要创建当前类的对象来调用sumAscii()函数,因为它们是当前类的一部分:

    public static void main(String[] args) 
    {
        //You don't need this line
        //Exam3Question2 c = new Exam3Question2();
    
        // Remove the c. from the beginning of the function calls
        int sum1 = sumAscii(Input1); //What is Input1
        int sum2 = sumAscii(Input1, Input2); //What is Input2
        //
    }
    

    您想要在 main 中做的是在您的 word 变量上调用 sumAscii(),以便您可以将结果添加到 sum1

    public static void main(String[] args) 
    {
        Scanner in = new Scanner(System.in);
        System.out.println("Enter some text");
        String word = in.nextLine();
    
        int sum1 = sumAscii(word);
        System.out.println("The sum of the string " + word + " is: " + sum1);
    }
    

    如果你想用 2 个不同的词来调用重载的 sumAscii() 方法,你需要从用户那里得到另一个词:

    public static void main(String[] args) 
    {
        Scanner in = new Scanner(System.in);
    
        System.out.println("Enter some text");
        String word = in.nextLine();
    
        System.out.println("Enter some more text");
        String word2 = in.nextLine();
    
        int sum2 = sumAscii(word, word2);
        System.out.println("The sum of the two strings is: " + sum2);
    }
    

    最后,您重载的sumAscii() 方法可以简化为:

    public int sumAscii(String Input1, String Input2)
    {
        return sumAscii(Input1 + Input2);
    }
    

    【讨论】:

      猜你喜欢
      • 2014-09-28
      • 1970-01-01
      • 2020-11-01
      • 2016-02-18
      • 1970-01-01
      • 2020-01-29
      • 2010-10-30
      • 2020-10-17
      • 1970-01-01
      相关资源
      最近更新 更多