Java 到 C# 尝试学习和理解两者之间的差异 [关闭]

Posted

技术标签:

【中文标题】Java 到 C# 尝试学习和理解两者之间的差异 [关闭]【英文标题】:Java to C# Trying to learn and understand the differences between the two [closed] 【发布时间】:2021-05-07 01:35:32 【问题描述】:

我学习了几个 Java 课程,在学习之后了解到 C# 非常相似,我正在尝试通过将 Java 中的简单程序转换为 C# 来学习。到目前为止,它在简单的数学问题和打印到控制台方面进展顺利,但现在我开始使用数组和列表,但我似乎没有做正确的事情。我的代码看起来应该可以工作,并且 Visual Studio 2019 中的描述符看起来一切都应该按照我认为的方式运行。但它不会打印出与我的 Java 代码相同的有意义的数据。第一个 Java。

import java.text.DecimalFormat;
import java.util.ArrayList;

public class Main 
    //Max number method finds the max number of an array list
    public static double largest(ArrayList x)
        double max = (double) x.get(0);
        for (int i =1; i<(double)x.size(); i++)
            if ((double)x.get(i) > max)
                max = (double)x.get(i);
            
        
        return max;
    
    public static void main(String[] args)
        ArrayList<Double> numbers = new ArrayList<>();
        DecimalFormat f = new DecimalFormat("##.00");

        for (int x=0; x<40; x++)
            numbers.add(
                    Double.valueOf(
                            f.format(Math.random()*100 - 1)));
        

        System.out.println(numbers);
        System.out.println(largest(numbers));
    

现在是 C#

using System;
using System.Collections.Generic;

namespace Arrays

    class Program
       
        public static double largest(Array x)
        
            double max = (double)x.GetValue(0);
            for(int i = 1; i<x.Length; i++)
            
                if ((double)x.GetValue(i) > max)
                
                    max = (double)x.GetValue(i);
                
            
            return max;
        

        static void Main(string[] args)
        
            Random rand = new Random();
            List<double> numbers = new List<double>();
            for(int x=0; x<40; x++)
            
                numbers.Add(
                    Math.Round(
                        rand.NextDouble()));
            
            Console.WriteLine(numbers);
            Console.WriteLine(largest(numbers.ToArray()));

        
    


我知道语法会与任何其他两种语言不同,但我认为这会起作用。自学 C#,如果这看起来过于基础,我深表歉意。

【问题讨论】:

Java 和 C# 的相似之处更多是结构性和宏观性,而不是它们如何将列表输出到控制台的具体细节。 【参考方案1】:

首先,C# 中的rand.NextDouble() 返回一个介于 0.0 和 1.0 之间的数字。 Math.Round(rand.NextDouble()) 会给您 0 或 1,因此通过生成 40 个随机数,您将获得一个充满 0 和 1 的数组。 要让 C# 程序做你的 Java 程序做的事情,你可以使用下面的代码:

numbers.Add(
    Math.Round(
        rand.NextDouble() * 100 - 1, 2));

其次,我猜你会看到类似的东西

System.Collections.Generic.List`1[System.Double]

在程序的输出中。这是因为 C# 中的 ListToString 函数没有很好的定义,而 Java 中的 ArrayList 有。 实际上,如果不使用ArrayList,而是使用Java 中的标准double[] 数组,则会打印出类似的“非信息性”字符。

在 C# 中,您可以执行以下操作:

string.Join(", ", numbers)

使输出类似于 Java 的 ArrayList

【讨论】:

非常感谢!这使一切都按我想象的方式工作。低至+1,但谢谢。现在要在更复杂的事情上练习这一点,以真正了解这两种语言的不同之处。看到这些差异非常有趣。【参考方案2】:

从你的 Main() 方法开始,首先让我们看看下面的 sn-p:

numbers.Add(
   Math.Round(
      rand.NextDouble()));

rand.NextDouble() 生成一个介于 0-1 之间的带有多个小数点的数字。

Math.Round() 会将指定的数字四舍五入到最接近的整数,还可以让您指定要在小数点后显示的位数。

假设我们将这个 sn-p 编辑为:

numbers.Add(
   Math.Round(
      rand.NextDouble(), 2));

因此,您的列表将填充 40 个数字。每个数字包括小数点后两位。

下一个技巧,我们将看看这一行:Console.WriteLine(numbers)。这当前正在输出变量的定义,例如“Systems.Collections.List” 相反,如果我们想输出这个集合中的值,那么我们可以用foreach循环解析这个List:

foreach (double number in numbers)
    Console.WriteLine(number);

完成这两项更改后,您应该会看到输出显示列表中的所有数字以及一个额外的最后一个数字,即列表中最大的数字。

【讨论】:

我开始明白了。非常感谢您的帮助! “foreach”循环非常有见地。还在学习中,非常感谢您的提示!

以上是关于Java 到 C# 尝试学习和理解两者之间的差异 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

在 C++ 中找不到 AoS 和 SoA 之间的性能差异

人工智能和机器学习之间的差异及其重要性,一定要分清楚!

java中的并发和并行之间有区别吗?

Java入门系列之访问修饰符作用范围

Matlab 到 C++ 的翻译

两个轴承之间的差异(角度)