如何在我的程序中显示“以英寸为单位

时间:2013-10-06 01:28:47

标签: java

感谢您试图帮助我。

我正在处理的程序应该以一英尺和几英寸的方式询问一个人的输入

2' 2 2/2"< ---(此格式)

然而,我无法想出一种能够实现这种用户输入的方法。

该计划由三个班级组成

  • 分数
  • 混合

爪哇:

import java.util.Scanner;
class Mix extends Fraction {

  public Mix ( int n, int m) {
    super (n,m);
  }

  public String displayMix() {
  String str="";
    if (first < second) 
    str=first+ "'" + first%second +"/"+second+"\"";
    else 
    str=first+"'" +(first+second)+"/"+second+"\"";

    return str; 
  } //display

  public static String get () {
    Scanner scan = new Scanner(System.in);
    System.out.print("Please enter a mixed-format number:");
    String userInput = scan.nextLine();
    userInput = userInput.trim();
    System.out.println("Input is: "+ userInput);
    return (userInput);
  } //get


  public static void main(String [] args) {
    String userInput;
    int[]iA = {0,0,0,1};

    userInput = Mix.get();
    iA=parse(userInput);
    Mix f = new Mix ( iA[0] , (iA[1]*iA[2])+(iA[3]) );
    System.out.println("Number = " + f.displayMix());

    userInput = Mix.get();
    iA=parse(userInput);
    Mix g = new Mix ( iA[0] , iA[1] * iA[3] + iA[2]);
    System.out.println("Number = " + g.displayMix());

    Mix h = Mix.add (f,g);
    System.out.println("Sum ="+ h.displayMix());
  } // main


  public static Mix add (Mix f, Mix g) {
    int gtop=       f.first+g.first;

    int gbottom=    f.second+g.second;
    return(new Mix ( gtop, gbottom));
  } //add


  public static int[] parse (String userInput) {
    int [] sA = {0,0,0,1};
    int pos = userInput.indexOf("'");

    String sNum0 = userInput.substring(0,pos);
    pos = userInput.indexOf("'");
    sA[0]= Integer.parseInt(sNum0);

    String sNum = userInput.substring(0,pos);
    pos = sNum.indexOf("  ");
    sA[1]= Integer.parseInt(sNum);

    String sNum2 = userInput.substring(pos + 1);
    pos = sNum2.indexOf("/");

    String sTop= sNum2.substring (pos +3);
    pos = sNum2.indexOf("\"");
    sA[2] = Integer.parseInt(sTop);

    String sBot = sNum2.substring(pos +1);

    sA[3] = Integer.parseInt(sBot);

    // 2' 2 2/2
    return (sA);
  }
} //parse

输入

后我设法得到了结果
2' 2 2/2"1

我不知道我做错了什么,但有些事情已经结束,因为我需要一个数字后才能得到一个结果。

我很确定解析方法有问题,我只是不知道它在哪里。

这是Fraction类

public class Fraction extends Pair {
  //attributes: NONE

  public Fraction(int n, int m) {
    super(n,m);
    int g=gcd(n,m);
    first = first;
    second=second/g;
  } //Fraction


  public void display2() {
    System.out.print(first);
    System.out.print("/");
    System.out.println(second);
  } //display


  public Fraction add (Fraction f1, Fraction f2) {
    int gtop=f1.first * f2.second
    + f2.first * f1.second;
    int gbottom= f1.second * f2.second;
    return (new Fraction(gtop,gbottom));
  }


  public static int gcd (int n, int m) {
    while ( n!=m) {
      if (n>m) n=n-m;
      else m=m-n;
    } //while
    return (n);
  } //gcd
} //class

这是配对类

public class Pair {
  int first;
  int second;

  public Pair(int n, int m) {
    first=n;
    second=m;
  } //Pair


  public void display() {
    //pseudo_code is here
    System.out.print("First integer="+first);
    System.out.println();
    System.out.println("Second integer="+second);
  } //display


  public static void main(String[] args) {
    //pseudo-code is here
    Pair f= new Pair(2,4);
    f.display();
  } //main
} //class

2 个答案:

答案 0 :(得分:1)

  

我很确定解析方法有问题,我只是不知道它在哪里。

绝对

出于调试目的,最好在要解析的情况下使用不同的值。对于输入字符串2' 2 2/2",如果尝试打印输出,则可能会收到误报。向"1' 2 3/4"5"方法提供新的输入字符串parse会生成int[] sA的数组1 1 5 5。现在找到问题。

int pos = userInput.indexOf("'");

String sNum0 = userInput.substring(0, pos);
pos = userInput.indexOf("'"); //why getting a position you already have?
sA[0] = Integer.parseInt(sNum0);

该代码段用于检索第一个数字。在我提供的评论中,一个奇怪的是明显的。接下来问题就开始了,

 String sNum = userInput.substring(0, pos);
 pos = sNum.indexOf("  ");
 sA[1] = Integer.parseInt(sNum);

您再次从输入中获得相同的2,然后尝试在1个字符长度的字符串中查找双空格。您的pos变为-1而您复制的数据作业sA[0]sA[1]具有相同的值。

String sNum2 = userInput.substring(pos + 1);
pos = sNum2.indexOf("/");

接下来,由于您的pos现在是-1,因此您将整个userInput子串起来,导致sNum2和userInput基本相互.equals()pos现在等于6。

String sTop = sNum2.substring(pos + 3);
pos = sNum2.indexOf("\"");
sA[2] = Integer.parseInt(sTop);

pos + 3是您必须输入额外输入字符的原因。

我不会详细介绍如何以及在何处解决问题,因为有几种解决方案。但是,如果您被允许使用.split()方法,我强烈建议您利用它。

 String[] tokens = "1' 2 3/4\"".split(" ");

答案 1 :(得分:0)

按标题回答问题......

必须转义文字双引号:

String length = "6\"";
System.out.println(length); // 6"

有关转义字符的详细信息,请参阅JLS - 3.10.6: Escape Sequences for Character and String Literals