Java分数计算器

2024-05-27

我对 Java 编程还很陌生,我的 AP 计算机编程课程有作业要完成,所以请耐心等待。我必须弄清楚如何将两个分数相乘。我想知道是否有任何方法可以在方法内部声明变量并在该方法外部使用它(我在介绍方法中的 while 循环)。谢谢您,希望这不会令人困惑!

import java.util.Scanner;
import java.util.StringTokenizer;

public class javatest3 {
    static int num1 = 0;
    static int num2 = 0;
    static int denom1 = 0;
    static int denom2 = 0;
    public static void main(String[] args){
    System.out.println("Enter an expression (or \"quit\"): "); //prompts user for input
    intro();

}
public static void intro(){
    Scanner input = new Scanner(System.in); 
    String user= input.nextLine();
    while (!user.equals("quit") & input.hasNextLine()){ //processes code when user input does not equal quit
        StringTokenizer chunks = new StringTokenizer(user, " "); //parses by white space
        String fraction1 = chunks.nextToken(); //first fraction
        String operand = chunks.nextToken(); //operator 
        String fraction2 = chunks.nextToken(); //second fraction
        System.out.println("Fraction 1: " + fraction1); 
        System.out.println("Operation: " + operand); 
        System.out.println("Fraction 2: " + fraction2); 
        System.out.println("Enter an expression (or \"quit\"): "); //prompts user for more input


    while (user.contains("*")){
        parse(fraction1);
        parse(fraction2);
        System.out.println("hi");
        int num = num1 * num2;
        int denom = denom1 * denom2;
        System.out.println(num + "/" + denom);
        user = input.next();

    }

    }
}

public static void parse(String fraction) {
    if (fraction.contains("_")){
        StringTokenizer mixed = new StringTokenizer(fraction, "_");
        int wholeNumber = Integer.parseInt(mixed.nextToken());
        System.out.println(wholeNumber);
        String frac = mixed.nextToken();
        System.out.println(frac);
        StringTokenizer parseFraction = new StringTokenizer(frac, "/"); //parses by forward slash
        int num = Integer.parseInt(parseFraction.nextToken());  
        System.out.println(num);
        int denom = Integer.parseInt(parseFraction.nextToken());
        System.out.println(denom);




    }
    else if (!fraction.contains("_") && fraction.contains("/")){
        StringTokenizer parseFraction = new StringTokenizer(fraction, "/"); //parses by forward slash
        int num = Integer.parseInt(parseFraction.nextToken());  
        System.out.println(num);
        int denom = Integer.parseInt(parseFraction.nextToken());
        System.out.println(denom);



    }else{ 
        StringTokenizer whiteSpace = new StringTokenizer(fraction, " "); 
        int num = Integer.parseInt(whiteSpace.nextToken());  
        System.out.println(num);
}

}}


这个简短的答案是“不”。其他人已经解释了原因......但这里有两种可能的选择。我不知道您是否已经学习了这些概念,但是第一个替代方案与按引用传递与按值传递有关,第二个替代方案与面向对象编程有关。

替代方案#1:

您可以在方法外部声明一个变量,将其传递给方法并使用它,然后该变量在方法外部可用,因为它是在方法外部声明的。我认为一个例子将有助于更清楚地说明这一点:

void foo () {
    Integer a = 1;
    Integer b = 2;
    bar(a,b);
    System.out.println("a = " + a + ", b = " + b);
}

void bar (Integer a, Integer b) {
    a = 4;
    b = 8;
}

结果应该是a = 4, b = 8。然而,它是很重要需要注意的是,这是有效的,因为Integer(不像int) 是一个类,因此它的对象是通过引用传递的。如果a and b只是ints,那么它们将按值传递。这意味着bar()会有它自己的副本a and b从.....分离foo()的,以及对其中变量的修改bar()不会影响foo()的副本。例如:

void foo () {
    int a = 1;
    int b = 2;
    bar(a,b);
    System.out.println("a = " + a + ", b = " + b);
}

void bar (int a, int b) {
    a = 4;
    b = 8;
}

这会产生结果a = 1, b = 2.

我不太喜欢这种方法,因为它很丑陋而且很容易出错,但它is可能并且如果操作正确的话将会起作用。另外,如果您不执行面向对象的代码,您的选择可能是这样,或者只是不使用该部分的函数(这通常不是好的设计)。虽然这种事情在C、C++这样的语言中更为常见。但是这些语言对于按值或引用传递更加明确,并且您必须手动操作指针(而 Java 对程序员隐藏其指针),因此很难对何时按值或引用传递某些内容感到困惑(尽管更容易)犯其他类型的错误)。

替代方案#2:

如果可以选择,这将是我的偏好,但前提是您已经了解了一些有关面向对象编程的知识。如果您还没有了解这一点,我会采用另一种方法(但如果您好奇,请随意阅读)。

我将创建一个分数类,其中包含分子和分母的成员变量(如果需要支持的话,还有整数部分 - 尽管我个人无论如何都会将带有整数部分的分数减少为分子和分母,因为这就是如何我做数学)。然后我会创建一个带有 String 参数的构造函数,并且该构造函数的主体将像您的一样工作parse()方法。所以这会让你做这样的事情......

String strFractionString = /* initialize the string, e.g., reading from input */
Fraction myFrac = new Fraction(strFractionString); // parses string and assigns num & denom
System.out.println("My Fraction: " + myFrac.numerator + "/" + myFrac.denominator);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java分数计算器 的相关文章

  • Java 中等效的并行扩展

    我在 Net 开发中使用并行扩展有一些经验 但我正在考虑在 Java 中做一些工作 这些工作将受益于易于使用的并行库 JVM 是否提供任何与并行扩展类似的工具 您应该熟悉java util concurrent http java sun
  • 为什么 i++ 不是原子的?

    Why is i Java 中不是原子的 为了更深入地了解 Java 我尝试计算线程中循环的执行频率 所以我用了一个 private static int total 0 在主课中 我有两个线程 主题 1 打印System out prin
  • 在画布上绘图

    我正在编写一个 Android 应用程序 它可以在视图的 onDraw 事件上直接绘制到画布上 我正在绘制一些涉及单独绘制每个像素的东西 为此我使用类似的东西 for int x 0 x lt xMax x for int y 0 y lt
  • Play框架运行应用程序问题

    每当我尝试运行使用以下命令创建的新 Web 应用程序时 我都会收到以下错误Play http www playframework org Error occurred during initialization of VM Could no
  • Java - 将节点添加到列表的末尾?

    这是我所拥有的 public class Node Object data Node next Node Object data Node next this data data this next next public Object g
  • 如何找到给定字符串的最长重复子串

    我是java新手 我被分配寻找字符串的最长子字符串 我在网上研究 似乎解决这个问题的好方法是实现后缀树 请告诉我如何做到这一点或者您是否有任何其他解决方案 请记住 这应该是在 Java 知识水平较低的情况下完成的 提前致谢 附 测试仪字符串
  • 无法展开 RemoteViews - 错误通知

    最近 我收到越来越多的用户收到 RemoteServiceException 错误的报告 我每次给出的堆栈跟踪如下 android app RemoteServiceException Bad notification posted fro
  • Android MediaExtractor seek() 对 MP3 音频文件的准确性

    我在使用 Android 时无法在eek 上获得合理的准确度MediaExtractor 对于某些文件 例如this one http www archive org download emma solo librivox emma 01
  • 列出jshell中所有活动的方法

    是否有任何命令可以打印当前 jshell 会话中所有新创建的方法 类似的东西 list但仅适用于方法 您正在寻找命令 methods all 它会打印所有方法 包括启动 JShell 时添加的方法 以及失败 被覆盖或删除的方法 对于您声明的
  • 无法解析插件 Java Spring

    我正在使用 IntelliJ IDEA 并且我尝试通过 maven 安装依赖项 但它给了我这些错误 Cannot resolve plugin org apache maven plugins maven clean plugin 3 0
  • 禁止的软件包名称:java

    我尝试从数据库名称为 jaane 用户名 Hello 和密码 hello 获取数据 错误 java lang SecurityException Prohibited package name java at java lang Class
  • 在两个活动之间传输数据[重复]

    这个问题在这里已经有答案了 我正在尝试在两个不同的活动之间发送和接收数据 我在这个网站上看到了一些其他问题 但没有任何问题涉及保留头等舱的状态 例如 如果我想从 A 类发送一个整数 X 到 B 类 然后对整数 X 进行一些操作 然后将其发送
  • getResourceAsStream() 可以找到 jar 文件之外的文件吗?

    我正在开发一个应用程序 该应用程序使用一个加载配置文件的库 InputStream in getClass getResourceAsStream resource 然后我的应用程序打包在一个 jar文件 如果resource是在里面 ja
  • 如何在 javadoc 中使用“<”和“>”而不进行格式化?

    如果我写
  • Android 中麦克风的后台访问

    是否可以通过 Android 手机上的后台应用程序 服务 持续监控麦克风 我想做的一些想法 不断聆听背景中的声音信号 收到 有趣的 音频信号后 执行一些网络操作 如果前台应用程序需要的话 后台应用程序必须能够智能地放弃对麦克风的访问 除非可
  • Java列表的线程安全

    我有一个列表 它将在线程安全上下文或非线程安全上下文中使用 究竟会是哪一个 无法提前确定 在这种特殊情况下 每当列表进入非线程安全上下文时 我都会使用它来包装它 Collections synchronizedList 但如果不进入非线程安
  • simpleframework,将空元素反序列化为空字符串而不是 null

    我使用简单框架 http simple sourceforge net http simple sourceforge net 在一个项目中满足我的序列化 反序列化需求 但在处理空 空字符串值时它不能按预期工作 好吧 至少不是我所期望的 如
  • 静态变量的线程安全

    class ABC implements Runnable private static int a private static int b public void run 我有一个如上所述的 Java 类 我有这个类的多个线程 在里面r
  • 编译器抱怨“缺少返回语句”,即使不可能达到缺少返回语句的条件

    在下面的方法中 编译器抱怨缺少退货声明即使该方法只有一条路径 并且它包含一个return陈述 抑制错误需要另一个return陈述 public int foo if true return 5 鉴于Java编译器可以识别无限循环 https
  • 在 Maven 依赖项中指定 jar 和 test-jar 类型

    我有一个名为 commons 的项目 其中包含运行时和测试的常见内容 在主项目中 我添加了公共资源的依赖项

随机推荐

  • JavaFX 中的 MVC 模式与场景生成器

    我是 JavaFX 新手 根据我当前的设置 正在努力创建合适的 MVC 架构 我使用 Scene Builder 单击了一个 UI 并指定了一个 Controller 类 Startup public class Portal extend
  • GitHub Action 工作流程未运行

    我有一个 GitHub 操作工作流程文件 myrepo github workflows Build Webpage yml 它包含以下内容 name Webpage Build on push branches webpage jobs
  • 从 pandas 值序列创建 pandas 区间序列

    我能找到的最接近的答案似乎太复杂 如何在 pandas 中创建间隔列 https stackoverflow com a 47396828 575530 如果我有一个看起来像这样的 pandas 数据框 Value 6 12 56 60 1
  • 从多个 .csv 文件创建混淆矩阵

    我有很多具有以下格式的 csv 文件 338 800 338 550 339 670 340 600 327 500 301 430 299 350 284 339 284 338 283 335 283 330 283 310 282 3
  • exec()、shell_exec()、curl_exec() 的安全漏洞

    有时 我会使用 exec shell exec 和curl exec 以下是典型用途 假设其中有 PHP 变量 即第一个变量中的 html 用户有可能修改其内容 从安全漏洞的角度来看 我应该关注什么 escapeshellcmd 和 esc
  • 计算级别内的值

    我在 R 中生成了一组级别cut 例如假设 0 到 1 之间的小数值 分为 0 1 个区间 gt frac lt cut c 0 1 breaks 10 gt levels frac 1 0 001 0 1 0 1 0 2 0 2 0 3
  • 无法让我的脚本自动生成一些值以在有效负载中使用

    我创建了一个脚本 通过随后发送两个 https 请求来从目标页面获取 html 元素 我的脚本可以完美地完成这件事 但是 我必须从 chrome 开发工具复制四个值来填充其中的四个键payload为了发送最终的http请求到达目标页面 这是
  • 获取Android联系人排序首选项

    在 Android 的 联系人 gt 设置 中 我们有 列表排序依据 和 查看联系人姓名 选项 有什么方法可以在另一个应用程序中获取这些首选项吗 这意味着我的应用程序有我自己版本的联系人列表 我需要这些才能对其进行相应的排序 int sor
  • 如何删除 Google 地图自动完成下拉列表中的“Powered by Google”徽标?

    文档表明 如果我们要使用 Google 地图的自动完成功能 我们可以删除底部的 Powered by Google 徽标 知道该怎么做吗 阿尼梅什 南迪的答案有点旧了 实际上 要删除 由谷歌提供支持 徽标我必须使用以下代码 pac cont
  • 如何使用 Kafka 发送大消息(超过 15MB)?

    我发送字符串消息到Kafka V 0 8使用 Java Producer API 如果消息大小约为 15 MB 我会得到MessageSizeTooLargeException 我尝试过设置message max bytes到 40 MB
  • 删除已从另一个下拉菜单中选择的下拉值

    我在网上搜索了一段时间 但仍然找不到答案 我的网站上有三个下拉菜单 我使用它们来接受用户首选项 以便用户可以控制结果的输出 所以我想知道如果在其中一个下拉列表中选择了该值 是否可以从其他两个下拉列表中取出该值 例如 如果用户在第一个电影中选
  • Core Data 与 SQLite 3 [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 收到 GCM 通知时启动应用程序

    我有 GCM 通知实施 我知道客户端应用程序无论处于前台 后台还是终止状态都会收到通知 我想知道的是 当应用程序处于终止状态时 如何在收到通知时启动我的应用程序 在消息接收器中 我执行以下操作 final Intent notificati
  • HttpContext 中需要什么才能允许 FormsAuthentication.SignOut() 执行?

    我正在尝试为我们的注销方法编写一个单元测试 除其他外 它FormsAuthentication SignOut 然而 它抛出一个System NullReferenceException 我创建了一个模拟 HttpContext 使用起订量
  • 如何使用 Jboss AS 7.1 启用自定义 log4j

    我尝试了几种选择 但一切对我都不起作用 以前 我在 Tomcat 6 7 中使用了相同的 log4j xml 简单的通用配置 并且我可以通过更新 log4j xml 来控制根日志记录和应用程序日志记录 当我使用 JBoss AS 7 1 部
  • Shiny 中的模态对话框:可以调整宽度但不能调整高度

    在我的 Shiny 应用程序中 我有几个来自闪亮BS 包的模式窗口 我可以像这样调整这些模式窗口的宽度 tags head tags style HTML modal lg width 1200px abs 1 background col
  • 是一对一的关系不好的策略

    用户始终拥有一个钱包 一个钱包始终属于一位用户 由于我想分离与钱夹相关的属性 我创建了 Wallet 对象并能够跟踪钱交易 我创建了 public Wallet Entity
  • Hibernate 命名查询使用 Like 和 % % 运算符?

    在我的 Hibernate JPA 示例代码中 public List
  • 使用抽象类作为模板类型

    我对c 还是很陌生 来自java 我有一个 stl 类型列表Actor When Actor仅包含 真实 方法就没有问题 我现在想将这个类扩展到几个类 并且需要将一些方法更改为抽象的 因为它们不再具有具体的意义 正如我 从文档中 预期的那样
  • Java分数计算器

    我对 Java 编程还很陌生 我的 AP 计算机编程课程有作业要完成 所以请耐心等待 我必须弄清楚如何将两个分数相乘 我想知道是否有任何方法可以在方法内部声明变量并在该方法外部使用它 我在介绍方法中的 while 循环 谢谢您 希望这不会令