How do I select from two variables in Unity - arrays

I have two scores
A = 0
B = 0
I want to randomly pick one and add 7 to it.
I believe I have to do an array, but can't figure that out.
I also believe I need to do a random.range, but because I can't figure out the array I can't get beyond this step.
I would also like to set Which every team scored to "teamScored"
code:
public float A = 0;
public float B = 0;
public float [] scores = {A,B};
public float teamScore=??;
public void Start{
teamScored = scores(Random.Range(0,2));
teamScored +7;
}
I know this is broken, but this is how I see it suppose to be working in my head.

public int A = 0;
public int B = 0;
public int[] scores = {A,B};
public void Start{
int teamScored = Random.Range(0,2);
scores[teamScored] += 7;
}

Related

Passing arrays between methods, and accessing them accordingly

I'm supposed to use two methods to hold arrays, then with the two arrays determine win % of the rockets, average margin of score difference for the games lost by Houston Rockets, and the lowest Houston Rockets’ score and the corresponding game number. I primarily need help with the first one, and I can get the other tasks. I just dont know how to pass arrays from methods very well. Any help would be useful, THanks!
import java.util.Scanner;
public class MorenoJonathonRocketsStatistics
{
public static void main(String[] args)
{
System.out.println("enter rockets game scores");
int[] rockets = rocketsScore();
System.out.println("enter opponents scores");
int[] opponents = opponentsScore();
int per = percent();
System.out.println("game win percent"+per+" %");
}
public static int[] rocketsScore()
{
Scanner sc = new Scanner(System.in);
int[] rocketsScore = new int[8];
for(int i=0;i<rocketsScore.length;i++)
{
rocketsScore[i] = sc.nextInt();
}
return rocketsScore;
}
public static int[] opponentsScore()
{
Scanner sc = new Scanner(System.in);
int[] opponentsScore = new int[8];
for(int i=0;i<opponentsScore.length;i++)
{
opponentsScore[i] = sc.nextInt();
}
return opponentsScore;
}
public static int percent(int[] array, int[] array2)
{
int[] rock = rocketsScore.length();
int[] opp = opponentsScore.length();
double percent=0;
int w=0, l=0;
for(int i=0; i<rocketsScore.length;i++)
{
if(rocketsScore[i]>opponentsScore[i])
{
w++;
}
else{
l++;
}
}
percent = w/l;
return percent;
}
}
To pass array in methods, you don't need to put any brackets beside the variable that is holding the array. So, you may want to do it like below:
int per = percent(rockets, opponents);

Libgdx - How to get a specific item from an array?

I have a Player class which has
int number;
In main, I store them in Array.
Array<Player> players;
How can I get a player which has for example number=2?
This question is programming in general, and has several ways to do what you say, I recommend you look for OOP.
a solution, general, would encapsulate the variable, "creating getter and setter, you need, eg:
this a simple class;
private int number;
public Player(int num){
this.number = num;
}
public int getNumber (){
return number;
}
public void setNumber (int n){
this.number = n;
}
.
In your code for search you can use the solution, using a for, or an iterator
for (int a = 0; a < players.size(); a++){
int tmpNumber = players.get(a).getNumber();
if(tmpNumber == 2){
players.get(a); //the object array with index equal to
//the value of 'a', have, number 2 stored
//in the variable 'number'
}
}
but this question I think is a little matter of taste or needs you have
I'm going to make some assumptions to demonstrate it:
Let's assume you have a constructor in your Player class:
public Player(int num){
this.number = num;
}
And you have added some players in your arraylist:
players.add(new Player(1));
players.add(new Player(2));
players.add(new Player(3));
Now loop through your array and find the one where number == 2
for (int i = 0; i < players.size(); i++){
Player tmp = players.get(i);
if(tmp.number == 2){
System.out.println("Index of player number 2: " + players.indexOf(tmp));
}
}
I realised that I'd misunderstood the question with my previous answer. Here's a better one...
Those recommending you iterate through the Array are correct, but if you have a lot of Players this will be ineffeicient. In that case, it would be better to use a Map where the key was the player number, and the value is the player itself.
Here's some sample code showing the approach (most of it is just setting up some test data)...
import java.util.HashMap;
import java.util.Map;
public class Temp {
public static void main(String[] args) {
// Create a map instead of an array
Map<Integer, Player> players = new HashMap<>();
// Quick hack just to put some data in it.
for(int i = 0; i < 1000; i++) {
players.put(i, new Player(i));
}
// Once they're in a map, retrieving them is simple...
Player playerFromMap = players.get(537);
// Check we got it right
System.out.println(playerFromMap.getNumber()); // 537
}
private static class Player {
private int number;
private Player(int number) {
this.number = number;
}
public int getNumber() {
return number;
}
}
}

Calculate the number of different digits in the integer

I'm practicing learning Java and I found this exercise online to input a long integer (ex 2827) and then calculate how many different digits there is in the integer (2,8 and 7) = 3 in this case.
I'm considering using a for loop and then with subString, comparing if the number equals each others and they (tutorial) suggest that I should use an array "used" to register which numbers appear, nonetheless
This is what I've got so far:
import java.util.Scanner;
public class UniqueInteger {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
boolean[] used = new boolean[10];
int uniqueNbr = 0;
System.out.print("Input an integer: ");
String nbrString = String.valueOf(scan.nextLong());
for (int i = 0; i < nbrString.length(); i++) {
String bigI = String.valueOf(i);
if(nbrString.substring(i,(i+1)).equals(bigI)){
uniqueNbr++;
}
}
System.out.println("Amount of unique digits: " + uniqueNbr);
}
}
My problem is now that this code does not work, and I'm not sure I'm taking the right approach here. I've also not found a reason or purpose to include the boolean array "used".
What's wrong with my code?
How do I in a smart way use the boolean array and make my code more efficient?
You need to check if the current number in the string has been used (using your boolean array). If it hasn't been used, set used[num] to true and increment uniqueNbr.
import java.util.Scanner;
public class UniqueInteger {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
boolean[] used = new boolean[10];
int uniqueNbr = 0;
System.out.print("Input an integer: ");
String nbrString = String.valueOf(scan.nextLong());
for (int i = 0; i < nbrString.length(); i++) {
int num = Character.getNumericValue(nbrString.charAt(i));
if(!used[num]) {
uniqueNbr++;
used[num] = true;
}
}
System.out.println("Amount of unique digits: " + uniqueNbr);
}
}

toString() implementation for Array

Before I state my question, I would like to thank everyone who helped me on my previous question. Anywho, I am currently getting the memory offsets as result even when I place it to the to a toString method. I've read most of the questions regarding the toString method and have somewhat of a understanding, I just wanted to make sure if I'm implementing this correctly. If you feel that this is a redundant question, I understand. Thanks for the help in advance.
Ship class
import java.util.Scanner;
public class Ship{
int type;
public String [][] shipPiece = new String[11][11];
Scanner in = new Scanner(System.in);
//Coordinate xy = new Coordinate();
//private Coordinate[] bawdPiece = {new section()};
public Ship(){
}
public String[][] placeShip()
{
System.out.println();
for(int x = 1; x<10; x++)
{
for(int y = 1; y<10; y++)
{
shipPiece[x][y] = "0";
System.out.print("|" + shipPiece);
}
}
return shipPiece;
}
public String toString()
{
StringBuilder temp = new StringBuilder();
temp.append(shipPiece);
return temp.toString();
}
public String toString()
{
StringBuilder temp = new StringBuilder();
for(int x = 0; x < 10; x++)
{
for(int y = 0; y < 10; y++)
{
temp.append(String.valueOf(shipPiece[x][y]);
}
temp.append("\n");
}
return temp.toString();
}
Also another thing I would like to point out is your array initialization. You initialize it with 11 x 11 indices, but your loop is only adding 9 values to each row and column Loop starts at 1 and ends at 9. You may want to fix your initialization to 10 x 10 and make your loop start at 0.
If I understand the question correctly, you are trying to get the index of the shipPiece as a string?
If that's the case try String.ValueOf(index), you'll obviously have to do this twice as you have a 2-dimensional array.
Ex:
String s = String.ValueOf(xIndex) + "," + String.ValueOf(yIndex);

Multiple use a class

I am creating a game using an array, I have my Hunter class which looks somewhat like this ;
public static int x= 11;
public static int y =11;
public static String name = "H";`
And a method for its path using x and y.
I have declared hunter as an array in my board (2d array) class this way;
public Hunter hunters[] = new Hunter[5];
and the position of a hunter is declared in the board class as ;
a2[Hunter.x][Hunter.y] = Hunter.name;
Question: I want 5 hunters to appear on the board, how do I use the array to spawn additional 4 hunters? Thanks.
you created your array fine all you need to do is use it:
for (int i = 0; i < 5; ++i)
{
a2[hunters[i].x][hunters[i].y] = hunters[i].name
}
also, you need to make your Hunter members non-static
class Hunter
{
private int x, y;
public void setLocation(int x_, int y_)
{
x = x_; y = y_;
}
}
you get the idea :)
The static keyword (assuming you are using C++, java, C#) means that the variable is shared among all instances of the Hunter class. To allow each Hunter to have its own position, remove the static keyword and initialize them with a constructor.
I'll assume you're using Java bases on your use of String:
public class Hunter {
public int x;
public int y;
public String name;
public Hunter(int x, int y, string name) {
this.x = x;
this.y = y;
this.name = name;
}
}
Then to initialize 5 you would do
int numHunters = 5;
for (int i = 0; i < numHunters; i ++) {
hunters[i] = new Hunter(/* put x and y and name here */);
}
You can then use them to populate the board:
for (int i = 0; i < numHunters; i ++) {
Hunter h = hunters[i];
a2[h.x][h.y] = h.name;
}
You didn't specify what language you're using. That would help a bit.
At a minimum, try removing the "static" keyword from your property definitions.
In C#, your Hunter class might look like
public class Hunter
{
public int x;
public int y;
public String name;
public Hunter(int newX, int newY, String newName)
{
x = newX;
y = newY;
name = newName;
}
}
You create new Hunters using Hunter h1 = new Hunter(11, 11, "H");. Once created, you can do whatever with it.
You may want to do some reading up on Object Oriented Programming - see Intro to OOP esp sections 4.3 - 4.5 (they're short)

Resources