2017-02-04 3 views
0

Я пытаюсь распечатать список результатов каждый раз, когда время является целым числом (ei, 2.0, 4.0, 12.0 и т. Д.), Но оно печатает только первую строку результатов. Неправильно ли условие if? или моя команда для печати значений?Таблица результатов поиска неисправностей

упаковка a03;

импорт java.util.Scanner;

/** * * @author Calvin (A00391077) эта программа имитирует пушки стрелять по предустановок *, заданных пользователем. */ класс Cannon общественности {

public static final double DELTA_T = 0.001; 
public static final double GRAVITY = 9.81; 

/** 
* @param args the command line arguments 
*/ 
public static void main(String[] args) { 

    //variables 
    Scanner kbd = new Scanner(System.in); 
    double muzzleVelocity, muzzleHeight, time, height, velocity; 

    //introducing program 
    System.out.println("Cannon Simulation"); 
    System.out.println("-----------------"); 
    System.out.println(); 
    System.out.println("This program simulates firing a cannon straight" 
      + "up into the air. Velocity"); 
    System.out.println("is measured in metres per second squared and" 
      + " height in meteres."); 
    System.out.println(); 
    System.out.println("By Calvin Elliott (A00391077"); 
    System.out.println(); 
    System.out.println("...press enter..."); 
    kbd.nextLine(); 
    System.out.println(); 

    //getting muzzle velocity 
    System.out.println("What is the muzzle velocity of the projectile?"); 
    muzzleVelocity = kbd.nextDouble(); 

    while (muzzleVelocity <= 0) { 
     System.out.println("The velocity must be positive"); 
     System.out.println("What is the muzzle velocity of the projectile?"); 
     muzzleVelocity = kbd.nextDouble(); 
    } 

    //getting muzzle height 
    System.out.println("what height is the muzzle above the ground?"); 
    muzzleHeight = kbd.nextDouble(); 

    while (muzzleHeight <= 0) { 
     System.out.println("The position must be positive"); 
     System.out.println("What height is the muzzle above the ground?"); 
     muzzleHeight = kbd.nextDouble(); 

    } 

    //calculations 
    height = muzzleHeight; 
    velocity = muzzleVelocity; 
    time = 0; 

    System.out.println("TIME HEIGHT VELOCITY"); 
    System.out.println("---- ------ --------"); 

    while (height > 0) { 
     if ((time % 1.0) < DELTA_T) { 
      System.out.printf("%6.2f%10.3f%10.3f\n", time, height, velocity); 

     } 
     height = (height + (velocity * time)); 
     velocity = (velocity - (GRAVITY * time)); 
     time = (time + 0.001); 

    } 

} 

}

+0

Вы пробовали время% 1.0 == 0? – MacStation

ответ

1

Вы увеличиваете высоту на velocity * time, что абсолютное количество времени каждой итерации. Вы должны увеличить его вместо этого времени увеличиваем DELTA_T

Например:

while (height > 0) { 
    if ((time % 1.0) < DELTA_T) { 
     System.out.printf("%6.2f%10.3f%10.3f\n", time, height, velocity); 

    } 
    height = (height + (velocity * DELTA_T)); 
    velocity = (velocity - (GRAVITY * DELTA_T)); 
    time = (time + DELTA_T); 

} 

Также стоит отметить серьезность обычно должно быть отрицательное значение, так что вы можете добавить его в скорости, так же, как вы добавьте скорость в позицию.

+0

Теперь все имеет такой смысл. Большое спасибо. –

+0

@CalElliott, вы новичок здесь. Хорошей практикой является принятие наилучшего ответа. Флажок слева ... –